mirror of
https://github.com/ipxe/ipxe
synced 2026-01-13 00:48:39 +03:00
[crypto] Add memory output constraints for big-integer inline assembly
The ARM versions of the big-integer inline assembly functions include constraints to indicate that the output value is modified by the assembly code. These constraints are not present in the equivalent code for the x86 versions. As of GCC 11, this results in the compiler reporting that the output values may be uninitialized. Fix by including the relevant memory output constraints. Reported-by: Christian Hesse <mail@eworm.de> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -75,17 +75,18 @@ void bigint_multiply_raw ( const uint32_t *multiplicand0,
|
||||
*
|
||||
* a < 2^{n}, b < 2^{n} => ab < 2^{2n}
|
||||
*/
|
||||
__asm__ __volatile__ ( "mull %4\n\t"
|
||||
"addl %%eax, (%5,%2,4)\n\t"
|
||||
"adcl %%edx, 4(%5,%2,4)\n\t"
|
||||
__asm__ __volatile__ ( "mull %5\n\t"
|
||||
"addl %%eax, (%6,%2,4)\n\t"
|
||||
"adcl %%edx, 4(%6,%2,4)\n\t"
|
||||
"\n1:\n\t"
|
||||
"adcl $0, 8(%5,%2,4)\n\t"
|
||||
"adcl $0, 8(%6,%2,4)\n\t"
|
||||
"inc %2\n\t"
|
||||
/* Does not affect CF */
|
||||
"jc 1b\n\t"
|
||||
: "=&a" ( discard_a ),
|
||||
"=&d" ( discard_d ),
|
||||
"=&r" ( index )
|
||||
"=&r" ( index ),
|
||||
"+m" ( *result )
|
||||
: "0" ( multiplicand_element ),
|
||||
"g" ( multiplier_element ),
|
||||
"r" ( result_elements ),
|
||||
|
||||
Reference in New Issue
Block a user