Skip to content

Commit 11e5544

Browse files
committed
ARM asm: add "cc" to all clobber lists
Carry flags are more often than not affected by assembly code. Carry wasn't in any inline assembly clobber list. Always clobber "cc" to be safe.
1 parent 12ee732 commit 11e5544

14 files changed

Lines changed: 809 additions & 809 deletions

wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
403403
"bne L_AES_invert_key_mix_loop_%=\n\t"
404404
: [ks] "+r" (ks), [rounds] "+r" (rounds), [L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c), [L_AES_ARM32_td] "+r" (L_AES_ARM32_td_c)
405405
:
406-
: "memory", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
406+
: "memory", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
407407
);
408408
}
409409

@@ -924,7 +924,7 @@ void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p, unsigned char
924924
"L_AES_set_encrypt_key_end_%=: \n\t"
925925
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks), [L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c), [L_AES_ARM32_rcon] "+r" (L_AES_ARM32_rcon_c)
926926
:
927-
: "memory", "r12", "lr", "r5", "r6", "r7", "r8"
927+
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "cc"
928928
);
929929
}
930930

@@ -1575,7 +1575,7 @@ void AES_encrypt_block(const uint32_t* te_p, int nr_p, int len_p, const uint32_t
15751575
"eor r7, r7, r11\n\t"
15761576
: [te] "+r" (te), [nr] "+r" (nr), [len] "+r" (len), [ks] "+r" (ks)
15771577
:
1578-
: "memory", "lr"
1578+
: "memory", "lr", "cc"
15791579
);
15801580
}
15811581

@@ -1824,7 +1824,7 @@ void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p, unsigned l
18241824
"pop {%[ks]}\n\t"
18251825
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [L_AES_ARM32_te_ecb] "+r" (L_AES_ARM32_te_ecb_c)
18261826
:
1827-
: "memory", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11"
1827+
: "memory", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
18281828
);
18291829
}
18301830

@@ -2090,7 +2090,7 @@ void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p, unsigned l
20902090
"stm r9, {r4, r5, r6, r7}\n\t"
20912091
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv), [L_AES_ARM32_te_cbc] "+r" (L_AES_ARM32_te_cbc_c)
20922092
:
2093-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
2093+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
20942094
);
20952095
}
20962096

@@ -2358,7 +2358,7 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p, unsigned l
23582358
"stm r8, {r4, r5, r6, r7}\n\t"
23592359
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr), [L_AES_ARM32_te_ctr] "+r" (L_AES_ARM32_te_ctr_c)
23602360
:
2361-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
2361+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
23622362
);
23632363
}
23642364

@@ -3011,7 +3011,7 @@ void AES_decrypt_block(const uint32_t* td_p, int nr_p, const uint8_t* td4_p)
30113011
"eor r7, r7, r11\n\t"
30123012
: [td] "+r" (td), [nr] "+r" (nr), [td4] "+r" (td4)
30133013
:
3014-
: "memory", "lr"
3014+
: "memory", "lr", "cc"
30153015
);
30163016
}
30173017

@@ -3293,7 +3293,7 @@ void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p, unsigned l
32933293
"L_AES_ECB_decrypt_end_%=: \n\t"
32943294
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c), [L_AES_ARM32_td4] "+r" (L_AES_ARM32_td4_c)
32953295
:
3296-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
3296+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
32973297
);
32983298
}
32993299

@@ -3925,7 +3925,7 @@ void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p, unsigned l
39253925
"pop {%[ks]-r4}\n\t"
39263926
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv), [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c), [L_AES_ARM32_td4] "+r" (L_AES_ARM32_td4_c)
39273927
:
3928-
: "memory", "r12", "lr", "r8", "r9", "r10", "r11"
3928+
: "memory", "r12", "lr", "r8", "r9", "r10", "r11", "cc"
39293929
);
39303930
}
39313931

@@ -4523,7 +4523,7 @@ void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p, const unsigned
45234523
"bne L_GCM_gmult_len_start_block_%=\n\t"
45244524
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len), [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
45254525
:
4526-
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
4526+
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
45274527
);
45284528
}
45294529

@@ -4780,7 +4780,7 @@ void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p, unsigned l
47804780
"stm r8, {r4, r5, r6, r7}\n\t"
47814781
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr), [L_AES_ARM32_te_gcm] "+r" (L_AES_ARM32_te_gcm_c)
47824782
:
4783-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
4783+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
47844784
);
47854785
}
47864786

0 commit comments

Comments
 (0)