libbb/sha: do not read shaNI variable twice, and factor out its setting
My gcc inlines both calls, so instead of "-20 bytes" I get only this: function old new delta sha256_begin 84 83 -1 sha1_begin 114 111 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-4) Total: -4 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
bd76b75f72
commit
a59e5a7d08
1 changed files with 16 additions and 12 deletions
|
@ -23,6 +23,14 @@ static void cpuid(unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
static smallint shaNI;
|
static smallint shaNI;
|
||||||
|
static int get_shaNI(void)
|
||||||
|
{
|
||||||
|
unsigned eax = 7, ebx = ebx, ecx = 0, edx = edx;
|
||||||
|
cpuid(&eax, &ebx, &ecx, &edx);
|
||||||
|
ebx = ((ebx >> 28) & 2) - 1; /* bit 29 -> 1 or -1 */
|
||||||
|
shaNI = (int)ebx;
|
||||||
|
return (int)ebx;
|
||||||
|
}
|
||||||
void FAST_FUNC sha1_process_block64_shaNI(sha1_ctx_t *ctx);
|
void FAST_FUNC sha1_process_block64_shaNI(sha1_ctx_t *ctx);
|
||||||
void FAST_FUNC sha256_process_block64_shaNI(sha256_ctx_t *ctx);
|
void FAST_FUNC sha256_process_block64_shaNI(sha256_ctx_t *ctx);
|
||||||
# if defined(__i386__)
|
# if defined(__i386__)
|
||||||
|
@ -1175,12 +1183,10 @@ void FAST_FUNC sha1_begin(sha1_ctx_t *ctx)
|
||||||
#if ENABLE_SHA1_HWACCEL
|
#if ENABLE_SHA1_HWACCEL
|
||||||
# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
||||||
{
|
{
|
||||||
if (!shaNI) {
|
int ni = shaNI;
|
||||||
unsigned eax = 7, ebx = ebx, ecx = 0, edx = edx;
|
if (!ni)
|
||||||
cpuid(&eax, &ebx, &ecx, &edx);
|
ni = get_shaNI();
|
||||||
shaNI = ((ebx >> 28) & 2) - 1; /* bit 29 -> 1 or -1 */
|
if (ni > 0)
|
||||||
}
|
|
||||||
if (shaNI > 0)
|
|
||||||
ctx->process_block = sha1_process_block64_shaNI;
|
ctx->process_block = sha1_process_block64_shaNI;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
@ -1229,12 +1235,10 @@ void FAST_FUNC sha256_begin(sha256_ctx_t *ctx)
|
||||||
#if ENABLE_SHA256_HWACCEL
|
#if ENABLE_SHA256_HWACCEL
|
||||||
# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
||||||
{
|
{
|
||||||
if (!shaNI) {
|
int ni = shaNI;
|
||||||
unsigned eax = 7, ebx = ebx, ecx = 0, edx = edx;
|
if (!ni)
|
||||||
cpuid(&eax, &ebx, &ecx, &edx);
|
ni = get_shaNI();
|
||||||
shaNI = ((ebx >> 28) & 2) - 1; /* bit 29 -> 1 or -1 */
|
if (ni > 0)
|
||||||
}
|
|
||||||
if (shaNI > 0)
|
|
||||||
ctx->process_block = sha256_process_block64_shaNI;
|
ctx->process_block = sha256_process_block64_shaNI;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue