linuxkm: refactor SAVE_VECTOR_REGISTERS() macro to take a fail clause as an argument, to allow the preprocessor to completely eliminate it in non-kernel builds, and for backward compat with WCv5.0-RC8.

This commit is contained in:
Daniel Pouzzner
2021-10-08 17:32:20 -05:00
parent 6160da243d
commit 0f05a71bfb
7 changed files with 54 additions and 139 deletions

View File

@@ -782,7 +782,6 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
const int bits, Aes* aes)
{
int nr;
int ret;
#ifdef WOLFSSL_SMALL_STACK
Aes *temp_key;
#else
@@ -813,12 +812,11 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
nr = temp_key->rounds;
aes->rounds = nr;
if ((ret = SAVE_VECTOR_REGISTERS()) != 0) {
SAVE_VECTOR_REGISTERS(
#ifdef WOLFSSL_SMALL_STACK
XFREE(temp_key, aes->heap, DYNAMIC_TYPE_AES);
#endif
return ret;
}
return _svr_ret;);
Key_Schedule[nr] = Temp_Key_Schedule[0];
Key_Schedule[nr-1] = _mm_aesimc_si128(Temp_Key_Schedule[1]);
@@ -3139,11 +3137,8 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
__must_check int wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in)
{
if (haveAESNI && aes->use_aesni) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
}
if (haveAESNI && aes->use_aesni)
SAVE_VECTOR_REGISTERS(return _svr_ret;);
wc_AesEncrypt(aes, in, out);
if (haveAESNI && aes->use_aesni)
RESTORE_VECTOR_REGISTERS();
@@ -3158,11 +3153,8 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
/* Allow direct access to one block decrypt */
__must_check int wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in)
{
if (haveAESNI && aes->use_aesni) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
}
if (haveAESNI && aes->use_aesni)
SAVE_VECTOR_REGISTERS(return _svr_ret;);
wc_AesDecrypt(aes, in, out);
if (haveAESNI && aes->use_aesni)
RESTORE_VECTOR_REGISTERS();
@@ -3960,7 +3952,6 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
#ifdef WOLFSSL_AESNI
if (haveAESNI) {
int ret;
#ifdef DEBUG_AESNI
printf("about to aes cbc encrypt\n");
printf("in = %p\n", in);
@@ -3981,10 +3972,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
tmp_align = tmp + (AESNI_ALIGN - ((wc_ptr_t)tmp % AESNI_ALIGN));
XMEMCPY(tmp_align, in, sz);
if ((ret = SAVE_VECTOR_REGISTERS()) != 0) {
XFREE(tmp, aes->heap, DYNAMIC_TYPE_TMP_BUFFER);
return ret;
}
SAVE_VECTOR_REGISTERS(XFREE(tmp, aes->heap, DYNAMIC_TYPE_TMP_BUFFER); return _svr_ret;);
AES_CBC_encrypt(tmp_align, tmp_align, (byte*)aes->reg, sz,
(byte*)aes->key, aes->rounds);
RESTORE_VECTOR_REGISTERS();
@@ -4000,8 +3988,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
#endif
}
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_CBC_encrypt(in, out, (byte*)aes->reg, sz, (byte*)aes->key,
aes->rounds);
RESTORE_VECTOR_REGISTERS();
@@ -4086,7 +4073,6 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
#ifdef WOLFSSL_AESNI
if (haveAESNI) {
int ret;
#ifdef DEBUG_AESNI
printf("about to aes cbc decrypt\n");
printf("in = %p\n", in);
@@ -4099,8 +4085,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
/* if input and output same will overwrite input iv */
XMEMCPY(aes->tmp, in + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE);
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#if defined(WOLFSSL_AESNI_BY4)
AES_CBC_decrypt_by4(in, out, (byte*)aes->reg, sz, (byte*)aes->key,
aes->rounds);
@@ -7675,9 +7660,7 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
#ifdef WOLFSSL_AESNI
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_encrypt_avx2(in, out, authIn, iv, authTag, sz, authInSz, ivSz,
authTagSz, (const byte*)aes->key, aes->rounds);
RESTORE_VECTOR_REGISTERS();
@@ -7687,9 +7670,7 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
#endif
#ifdef HAVE_INTEL_AVX1
if (IS_INTEL_AVX1(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_encrypt_avx1(in, out, authIn, iv, authTag, sz, authInSz, ivSz,
authTagSz, (const byte*)aes->key, aes->rounds);
RESTORE_VECTOR_REGISTERS();
@@ -8201,9 +8182,7 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
#ifdef WOLFSSL_AESNI
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_decrypt_avx2(in, out, authIn, iv, authTag, sz, authInSz, ivSz,
authTagSz, (byte*)aes->key, aes->rounds, &res);
RESTORE_VECTOR_REGISTERS();
@@ -8215,9 +8194,7 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
#endif
#ifdef HAVE_INTEL_AVX1
if (IS_INTEL_AVX1(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_decrypt_avx1(in, out, authIn, iv, authTag, sz, authInSz, ivSz,
authTagSz, (byte*)aes->key, aes->rounds, &res);
RESTORE_VECTOR_REGISTERS();
@@ -8473,9 +8450,7 @@ static int AesGcmInit_aesni(Aes* aes, const byte* iv, word32 ivSz)
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_init_avx2((byte*)aes->key, aes->rounds, iv, ivSz, aes->H,
AES_COUNTER(aes), AES_INITCTR(aes));
RESTORE_VECTOR_REGISTERS();
@@ -8484,9 +8459,7 @@ static int AesGcmInit_aesni(Aes* aes, const byte* iv, word32 ivSz)
#endif
#ifdef HAVE_INTEL_AVX1
if (IS_INTEL_AVX1(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_init_avx1((byte*)aes->key, aes->rounds, iv, ivSz, aes->H,
AES_COUNTER(aes), AES_INITCTR(aes));
RESTORE_VECTOR_REGISTERS();
@@ -8494,9 +8467,7 @@ static int AesGcmInit_aesni(Aes* aes, const byte* iv, word32 ivSz)
else
#endif
{
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return BAD_STATE_E;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
AES_GCM_init_aesni((byte*)aes->key, aes->rounds, iv, ivSz, aes->H,
AES_COUNTER(aes), AES_INITCTR(aes));
RESTORE_VECTOR_REGISTERS();
@@ -8635,9 +8606,7 @@ static int AesGcmEncryptUpdate_aesni(Aes* aes, byte* c, const byte* p,
word32 blocks;
int partial;
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* Hash in A, the Authentication Data */
AesGcmAadUpdate_aesni(aes, a, aSz, (cSz > 0) && (c != NULL));
@@ -8763,9 +8732,7 @@ static int AesGcmEncryptFinal_aesni(Aes* aes, byte* authTag, word32 authTagSz)
/* AAD block incomplete when > 0 */
byte over = aes->aOver;
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
if (aes->cOver > 0) {
/* Cipher text block incomplete. */
over = aes->cOver;
@@ -8863,9 +8830,7 @@ static int AesGcmDecryptUpdate_aesni(Aes* aes, byte* p, const byte* c,
word32 blocks;
int partial;
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* Hash in A, the Authentication Data */
AesGcmAadUpdate_aesni(aes, a, aSz, (cSz > 0) && (c != NULL));
@@ -8999,8 +8964,7 @@ static int AesGcmDecryptFinal_aesni(Aes* aes, const byte* authTag,
byte over = aes->aOver;
byte *lastBlock = AES_LASTGBLOCK(aes);
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
if (aes->cOver > 0) {
/* Cipher text block incomplete. */
over = aes->cOver;
@@ -10001,9 +9965,7 @@ int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
B[15] = 1;
#ifdef WOLFSSL_AESNI
if (haveAESNI && aes->use_aesni) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
while (inSz >= AES_BLOCK_SIZE * 4) {
AesCcmCtrIncSet4(B, lenSz);
@@ -10089,9 +10051,7 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
#ifdef WOLFSSL_AESNI
if (haveAESNI && aes->use_aesni) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
while (oSz >= AES_BLOCK_SIZE * 4) {
AesCcmCtrIncSet4(B, lenSz);
@@ -10520,8 +10480,7 @@ int wc_AesEcbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
if ((in == NULL) || (out == NULL) || (aes == NULL))
return BAD_FUNC_ARG;
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = _AesEcbEncrypt(aes, out, in, sz);
RESTORE_VECTOR_REGISTERS();
@@ -10535,8 +10494,7 @@ int wc_AesEcbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
if ((in == NULL) || (out == NULL) || (aes == NULL))
return BAD_FUNC_ARG;
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = _AesEcbDecrypt(aes, out, in, sz);
RESTORE_VECTOR_REGISTERS();
@@ -10565,7 +10523,6 @@ static int wc_AesFeedbackEncrypt(Aes* aes, byte* out, const byte* in,
#ifdef WOLFSSL_AES_CFB
byte* reg = NULL;
#endif
int ret;
if (aes == NULL || out == NULL || in == NULL) {
return BAD_FUNC_ARG;
@@ -10591,8 +10548,7 @@ static int wc_AesFeedbackEncrypt(Aes* aes, byte* out, const byte* in,
sz--;
}
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
while (sz >= AES_BLOCK_SIZE) {
/* Using aes->tmp here for inline case i.e. in=out */
@@ -10662,7 +10618,6 @@ static int wc_AesFeedbackDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
byte mode)
{
byte* tmp;
int ret;
if (aes == NULL || out == NULL || in == NULL) {
return BAD_FUNC_ARG;
@@ -10684,8 +10639,7 @@ static int wc_AesFeedbackDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
sz--;
}
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
while (sz > AES_BLOCK_SIZE) {
/* Using aes->tmp here for inline case i.e. in=out */
@@ -10803,7 +10757,6 @@ static int wc_AesFeedbackCFB8(Aes* aes, byte* out, const byte* in,
word32 sz, byte dir)
{
byte *pt;
int ret;
if (aes == NULL || out == NULL || in == NULL) {
return BAD_FUNC_ARG;
@@ -10813,8 +10766,7 @@ static int wc_AesFeedbackCFB8(Aes* aes, byte* out, const byte* in,
return 0;
}
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
while (sz > 0) {
wc_AesEncryptDirect(aes, (byte*)aes->tmp, (byte*)aes->reg);
@@ -10858,7 +10810,6 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
byte cur = 0; /* hold current work in order to handle inline in=out */
byte* pt;
int bit = 7;
int ret;
if (aes == NULL || out == NULL || in == NULL) {
return BAD_FUNC_ARG;
@@ -10868,8 +10819,7 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
return 0;
}
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
while (sz > 0) {
wc_AesEncryptDirect(aes, (byte*)aes->tmp, (byte*)aes->reg);
@@ -11074,8 +11024,6 @@ int wc_AesKeyWrap_ex(Aes *aes, const byte* in, word32 inSz, byte* out,
byte t[KEYWRAP_BLOCK_SIZE];
byte tmp[AES_BLOCK_SIZE];
int ret;
/* n must be at least 2 64-bit blocks, output size is (n + 1) 8 bytes (64-bit) */
if (aes == NULL || in == NULL || inSz < 2*KEYWRAP_BLOCK_SIZE ||
out == NULL || outSz < (inSz + KEYWRAP_BLOCK_SIZE))
@@ -11096,8 +11044,7 @@ int wc_AesKeyWrap_ex(Aes *aes, const byte* in, word32 inSz, byte* out,
XMEMCPY(tmp, iv, KEYWRAP_BLOCK_SIZE);
}
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
for (j = 0; j <= 5; j++) {
for (i = 1; i <= inSz / KEYWRAP_BLOCK_SIZE; i++) {
@@ -11182,8 +11129,6 @@ int wc_AesKeyUnWrap_ex(Aes *aes, const byte* in, word32 inSz, byte* out,
0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6
};
int ret;
if (aes == NULL || in == NULL || inSz < 3 * KEYWRAP_BLOCK_SIZE ||
out == NULL || outSz < (inSz - KEYWRAP_BLOCK_SIZE))
return BAD_FUNC_ARG;
@@ -11203,8 +11148,7 @@ int wc_AesKeyUnWrap_ex(Aes *aes, const byte* in, word32 inSz, byte* out,
XMEMCPY(out, in + KEYWRAP_BLOCK_SIZE, inSz - KEYWRAP_BLOCK_SIZE);
XMEMSET(t, 0, sizeof(t));
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* initialize counter to 6n */
n = (inSz - 1) / KEYWRAP_BLOCK_SIZE;
@@ -11487,8 +11431,7 @@ int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
XMEMSET(tmp, 0, AES_BLOCK_SIZE); /* set to 0's in case of improper AES
* key setup passed to encrypt direct*/
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
wc_AesEncryptDirect(tweak, tmp, i);
@@ -11603,8 +11546,7 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
XMEMSET(tmp, 0, AES_BLOCK_SIZE); /* set to 0's in case of improper AES
* key setup passed to decrypt direct*/
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
wc_AesEncryptDirect(tweak, tmp, i);

View File

@@ -418,18 +418,14 @@ int wc_Chacha_Process(ChaCha* ctx, byte* output, const byte* input,
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(cpuidFlags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
chacha_encrypt_avx2(ctx, input, output, msglen);
RESTORE_VECTOR_REGISTERS();
return 0;
}
#endif
if (IS_INTEL_AVX1(cpuidFlags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
chacha_encrypt_avx1(ctx, input, output, msglen);
RESTORE_VECTOR_REGISTERS();
return 0;

View File

@@ -128,8 +128,7 @@ int wc_curve25519_make_pub(int public_size, byte* pub, int private_size,
#else
fe_init();
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = curve25519(pub, priv, kCurve25519BasePoint);
@@ -171,8 +170,7 @@ int wc_curve25519_generic(int public_size, byte* pub,
fe_init();
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = curve25519(pub, priv, basepoint);
@@ -289,8 +287,7 @@ int wc_curve25519_shared_secret_ex(curve25519_key* private_key,
ret = nxp_ltc_curve25519(&o, private_key->k, &public_key->p,
kLTC_Curve25519);
#else
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = curve25519(o.point, private_key->k, public_key->p.point);

View File

@@ -267,9 +267,7 @@ static int poly1305_blocks(Poly1305* ctx, const unsigned char *m,
{
#ifdef USE_INTEL_SPEEDUP
/* AVX2 is handled in wc_Poly1305Update. */
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
poly1305_blocks_avx(ctx, m, bytes);
RESTORE_VECTOR_REGISTERS();
return 0;
@@ -403,9 +401,7 @@ static int poly1305_block(Poly1305* ctx, const unsigned char *m)
{
#ifdef USE_INTEL_SPEEDUP
/* No call to poly1305_block when AVX2, AVX2 does 4 blocks at a time. */
int ret= SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
poly1305_block_avx(ctx, m);
RESTORE_VECTOR_REGISTERS();
return 0;
@@ -444,11 +440,7 @@ int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz)
intel_flags = cpuid_get_flags();
cpu_flags_set = 1;
}
{
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags))
poly1305_setkey_avx2(ctx, key);
@@ -511,7 +503,6 @@ int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz)
int wc_Poly1305Final(Poly1305* ctx, byte* mac)
{
#ifdef USE_INTEL_SPEEDUP
int ret;
#elif defined(POLY130564)
word64 h0,h1,h2,c;
@@ -531,8 +522,7 @@ int wc_Poly1305Final(Poly1305* ctx, byte* mac)
return BAD_FUNC_ARG;
#ifdef USE_INTEL_SPEEDUP
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags))
poly1305_final_avx2(ctx, mac);
@@ -720,9 +710,7 @@ int wc_Poly1305Update(Poly1305* ctx, const byte* m, word32 bytes)
#ifdef USE_INTEL_SPEEDUP
#ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags)) {
int ret = SAVE_VECTOR_REGISTERS();
if (ret != 0)
return ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* handle leftover */

View File

@@ -320,10 +320,8 @@ static int InitSha256(wc_Sha256* sha256)
static WC_INLINE int inline_XTRANSFORM(wc_Sha256* S, const byte* D) {
int ret;
if (Transform_Sha256_is_vectorized) {
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
}
if (Transform_Sha256_is_vectorized)
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = (*Transform_Sha256_p)(S, D);
if (Transform_Sha256_is_vectorized)
RESTORE_VECTOR_REGISTERS();
@@ -333,10 +331,8 @@ static int InitSha256(wc_Sha256* sha256)
static WC_INLINE int inline_XTRANSFORM_LEN(wc_Sha256* S, const byte* D, word32 L) {
int ret;
if (Transform_Sha256_is_vectorized) {
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
}
if (Transform_Sha256_is_vectorized)
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = (*Transform_Sha256_Len_p)(S, D, L);
if (Transform_Sha256_is_vectorized)
RESTORE_VECTOR_REGISTERS();

View File

@@ -509,10 +509,8 @@ static int InitSha512_256(wc_Sha512* sha512)
static WC_INLINE int Transform_Sha512(wc_Sha512 *sha512) {
int ret;
if (Transform_Sha512_is_vectorized) {
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
}
if (Transform_Sha512_is_vectorized)
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = (*Transform_Sha512_p)(sha512);
if (Transform_Sha512_is_vectorized)
RESTORE_VECTOR_REGISTERS();
@@ -520,10 +518,8 @@ static int InitSha512_256(wc_Sha512* sha512)
}
static WC_INLINE int Transform_Sha512_Len(wc_Sha512 *sha512, word32 len) {
int ret;
if (Transform_Sha512_is_vectorized) {
if ((ret = SAVE_VECTOR_REGISTERS()) != 0)
return ret;
}
if (Transform_Sha512_is_vectorized)
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = (*Transform_Sha512_Len_p)(sha512, len);
if (Transform_Sha512_is_vectorized)
RESTORE_VECTOR_REGISTERS();

View File

@@ -137,7 +137,7 @@
#include <asm/fpu/internal.h>
#endif
#ifndef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS() save_vector_registers_x86()
#define SAVE_VECTOR_REGISTERS(fail_clause) { int _svr_ret = save_vector_registers_x86(); if (_svr_ret != 0) { fail_clause } }
#endif
#ifndef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() restore_vector_registers_x86()
@@ -152,7 +152,7 @@
#define WOLFSSL_LINUXKM_SIMD_ARM
#include <asm/fpsimd.h>
#ifndef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS() save_vector_registers_arm()
#define SAVE_VECTOR_REGISTERS(fail_clause) { int _svr_ret = save_vector_registers_arm(); if (_svr_ret != 0) { fail_clause } }
#endif
#ifndef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() restore_vector_registers_arm()
@@ -162,7 +162,7 @@
#define WOLFSSL_NO_ASM
#endif
#ifndef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS() 0
#define SAVE_VECTOR_REGISTERS(...) ({})
#endif
#ifndef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() ({})
@@ -620,7 +620,7 @@
#else /* ! WOLFSSL_LINUXKM */
#ifndef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS() 0
#define SAVE_VECTOR_REGISTERS(...) do{}while(0)
#endif
#ifndef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() do{}while(0)