diff options
author | Richard Earnshaw <erich@gnu.org> | 1994-07-06 11:27:16 +0000 |
---|---|---|
committer | Richard Earnshaw <erich@gnu.org> | 1994-07-06 11:27:16 +0000 |
commit | 6a04a63408e4ae8b8747efff8ce2572b6b439a53 (patch) | |
tree | f091b27b28fd76bebafe61fb10db243cf370b946 | |
parent | 20250c072b934afe6194fdb4611e78f549465689 (diff) | |
download | gcc-6a04a63408e4ae8b8747efff8ce2572b6b439a53.zip gcc-6a04a63408e4ae8b8747efff8ce2572b6b439a53.tar.gz gcc-6a04a63408e4ae8b8747efff8ce2572b6b439a53.tar.bz2 |
(arm umul_ppmm): Fix use of uninitialized register.
Eliminate clobbers of hard registers.
From-SVN: r7663
-rw-r--r-- | gcc/longlong.h | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/gcc/longlong.h b/gcc/longlong.h index 19450c3..602606d 100644 --- a/gcc/longlong.h +++ b/gcc/longlong.h @@ -150,24 +150,25 @@ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define umul_ppmm(xh, xl, a, b) \ +{register USItype __t0, __t1, __t2; \ __asm__ ("%@ Inlined umul_ppmm - mov %|r0, %2, lsr #16 - mov %|r2, %3, lsr #16 - bic %|r1, %2, %|r0, lsl #16 - bic %|r2, %3, %|r2, lsl #16 - mul %1, %|r1, %|r2 - mul %|r2, %|r0, %|r2 - mul %|r1, %0, %|r1 - mul %0, %|r0, %0 - adds %|r1, %|r2, %|r1 + mov %2, %5, lsr #16 + mov %0, %6, lsr #16 + bic %3, %5, %2, lsl #16 + bic %4, %6, %0, lsl #16 + mul %1, %3, %4 + mul %4, %2, %4 + mul %3, %0, %3 + mul %0, %2, %0 + adds %3, %4, %3 addcs %0, %0, #65536 - adds %1, %1, %|r1, lsl #16 - adc %0, %0, %|r1, lsr #16" \ + adds %1, %1, %3, lsl #16 + adc %0, %0, %3, lsr #16" \ : "=&r" ((USItype)(xh)), \ - "=r" ((USItype)(xl)) \ + "=r" ((USItype)(xl)), \ + "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ : "r" ((USItype)(a)), \ - "r" ((USItype)(b)) \ - : "r0", "r1", "r2") + "r" ((USItype)(b)));} #define UMUL_TIME 20 #define UDIV_TIME 100 #endif /* __arm__ */ |