diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S index 7deabbf0cef..55d0181fb19 100644 --- a/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S +++ b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S @@ -3494,22 +3494,39 @@ L_SHA256_crypto_begin: vsldoi 6, 4, 4, 8 vsldoi 7, 4, 4, 12 # Load message, one word per vector register +#ifdef __LITTLE_ENDIAN__ + lvsl 9, 0, 8 + vspltisb 10, 3 + vxor 9, 9, 10 +#endif /* __LITTLE_ENDIAN__ */ lxvw4x 48, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 16, 16, 16, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 17, 16, 16, 4 vsldoi 18, 16, 16, 8 vsldoi 19, 16, 16, 12 lxvw4x 52, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 20, 20, 20, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 21, 20, 20, 4 vsldoi 22, 20, 20, 8 vsldoi 23, 20, 20, 12 lxvw4x 56, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 24, 24, 24, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 25, 24, 24, 4 vsldoi 26, 24, 24, 8 vsldoi 27, 24, 24, 12 lxvw4x 60, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 28, 28, 28, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 29, 28, 28, 4 vsldoi 30, 28, 28, 8 diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c index c7833ca99d1..6b3b087d848 100644 --- a/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c +++ b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c @@ -3422,22 +3422,39 @@ void Transform_Sha256_Len_crypto(wc_Sha256* sha256, const byte* data, "vsldoi 6, 4, 4, 8\n\t" "vsldoi 7, 4, 4, 12\n\t" /* Load message, one word per vector register */ +#ifdef __LITTLE_ENDIAN__ + "lvsl 9, 0, 8\n\t" + "vspltisb 10, 3\n\t" + "vxor 9, 9, 10\n\t" +#endif /* __LITTLE_ENDIAN__ */ "lxvw4x 48, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 16, 16, 16, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 17, 16, 16, 4\n\t" "vsldoi 18, 16, 16, 8\n\t" "vsldoi 19, 16, 16, 12\n\t" "lxvw4x 52, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 20, 20, 20, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 21, 20, 20, 4\n\t" "vsldoi 22, 20, 20, 8\n\t" "vsldoi 23, 20, 20, 12\n\t" "lxvw4x 56, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 24, 24, 24, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 25, 24, 24, 4\n\t" "vsldoi 26, 24, 24, 8\n\t" "vsldoi 27, 24, 24, 12\n\t" "lxvw4x 60, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 28, 28, 28, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 29, 28, 28, 4\n\t" "vsldoi 30, 28, 28, 8\n\t" diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S index 307a0fb1ec0..20837d8b394 100644 --- a/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S +++ b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S @@ -4185,28 +4185,57 @@ L_SHA512_crypto_begin: vsldoi 5, 4, 4, 8 vsldoi 7, 6, 6, 8 # Load message, one doubleword per vector register +#ifdef __LITTLE_ENDIAN__ + lvsl 9, 0, 8 + vspltisb 10, 7 + vxor 9, 9, 10 +#endif /* __LITTLE_ENDIAN__ */ lxvd2x 48, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 16, 16, 16, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 17, 16, 16, 8 lxvd2x 50, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 18, 18, 18, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 19, 18, 18, 8 lxvd2x 52, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 20, 20, 20, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 21, 20, 20, 8 lxvd2x 54, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 22, 22, 22, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 23, 22, 22, 8 lxvd2x 56, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 24, 24, 24, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 25, 24, 24, 8 lxvd2x 58, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 26, 26, 26, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 27, 26, 26, 8 lxvd2x 60, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 28, 28, 28, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 29, 28, 28, 8 lxvd2x 62, 0, 4 +#ifdef __LITTLE_ENDIAN__ + vperm 30, 30, 30, 9 +#endif /* __LITTLE_ENDIAN__ */ addi 4, 4, 16 vsldoi 31, 30, 30, 8 # Preload first key diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c index e455ab480dd..80e55ed3f29 100644 --- a/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c +++ b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c @@ -4113,28 +4113,57 @@ void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data, "vsldoi 5, 4, 4, 8\n\t" "vsldoi 7, 6, 6, 8\n\t" /* Load message, one doubleword per vector register */ +#ifdef __LITTLE_ENDIAN__ + "lvsl 9, 0, 8\n\t" + "vspltisb 10, 7\n\t" + "vxor 9, 9, 10\n\t" +#endif /* __LITTLE_ENDIAN__ */ "lxvd2x 48, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 16, 16, 16, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 17, 16, 16, 8\n\t" "lxvd2x 50, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 18, 18, 18, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 19, 18, 18, 8\n\t" "lxvd2x 52, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 20, 20, 20, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 21, 20, 20, 8\n\t" "lxvd2x 54, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 22, 22, 22, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 23, 22, 22, 8\n\t" "lxvd2x 56, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 24, 24, 24, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 25, 24, 24, 8\n\t" "lxvd2x 58, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 26, 26, 26, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 27, 26, 26, 8\n\t" "lxvd2x 60, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 28, 28, 28, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 29, 28, 28, 8\n\t" "lxvd2x 62, 0, %[data]\n\t" +#ifdef __LITTLE_ENDIAN__ + "vperm 30, 30, 30, 9\n\t" +#endif /* __LITTLE_ENDIAN__ */ "addi %[data], %[data], 16\n\t" "vsldoi 31, 30, 30, 8\n\t" /* Preload first key */