forked from len0rd/rockbox
Get rid of a useless copy instruction in the SH1 32*32->64bit multiply routines (signed and unsigned).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20013 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
789b0a2eb9
commit
d8ff94121f
2 changed files with 14 additions and 16 deletions
|
@ -415,14 +415,13 @@ static inline long muls32_asr26(long a, long b)
|
||||||
"addc %[t2],%[t3] \n" /* t3 += t2, carry -> t2 */
|
"addc %[t2],%[t3] \n" /* t3 += t2, carry -> t2 */
|
||||||
"movt %[t2] \n"
|
"movt %[t2] \n"
|
||||||
"mulu %[a],%[b] \n" /* b * d */
|
"mulu %[a],%[b] \n" /* b * d */
|
||||||
"mov %[t3],%[t1] \n" /* t2t3 <<= 16 */
|
"mov %[t3],%[t1] \n" /* t1t3 = t2t3 << 16 */
|
||||||
"xtrct %[t2],%[t1] \n"
|
"xtrct %[t2],%[t1] \n"
|
||||||
"mov %[t1],%[t2] \n"
|
|
||||||
"shll16 %[t3] \n"
|
"shll16 %[t3] \n"
|
||||||
"sts macl,%[t1] \n" /* lo = b * d */
|
"sts macl,%[t2] \n" /* lo = b * d */
|
||||||
"clrt \n" /* hi.lo += t2t3 */
|
"clrt \n" /* hi.lo += t1t3 */
|
||||||
"addc %[t3],%[t1] \n"
|
"addc %[t3],%[t2] \n"
|
||||||
"addc %[t2],%[r] \n"
|
"addc %[t1],%[r] \n"
|
||||||
"cmp/pz %[a] \n" /* ab >= 0 ? */
|
"cmp/pz %[a] \n" /* ab >= 0 ? */
|
||||||
"bt 1f \n"
|
"bt 1f \n"
|
||||||
"sub %[b],%[r] \n" /* no: hi -= cd (sign extension of ab is -1) */
|
"sub %[b],%[r] \n" /* no: hi -= cd (sign extension of ab is -1) */
|
||||||
|
@ -435,10 +434,10 @@ static inline long muls32_asr26(long a, long b)
|
||||||
"shll2 %[r] \n" /* hi <<= 6 */
|
"shll2 %[r] \n" /* hi <<= 6 */
|
||||||
"shll2 %[r] \n"
|
"shll2 %[r] \n"
|
||||||
"shll2 %[r] \n"
|
"shll2 %[r] \n"
|
||||||
"shlr16 %[t1] \n" /* (unsigned)lo >>= 26 */
|
"shlr16 %[t2] \n" /* (unsigned)lo >>= 26 */
|
||||||
"shlr8 %[t1] \n"
|
"shlr8 %[t2] \n"
|
||||||
"shlr2 %[t1] \n"
|
"shlr2 %[t2] \n"
|
||||||
"or %[t1],%[r] \n" /* combine result */
|
"or %[t2],%[r] \n" /* combine result */
|
||||||
: /* outputs */
|
: /* outputs */
|
||||||
[r] "=&r"(r),
|
[r] "=&r"(r),
|
||||||
[t1]"=&r"(t1),
|
[t1]"=&r"(t1),
|
||||||
|
|
|
@ -78,14 +78,13 @@ static inline unsigned sc_mul32(unsigned a, unsigned b)
|
||||||
"addc %[t2], %[t3] \n" /* t3 += t2, carry -> t2 */
|
"addc %[t2], %[t3] \n" /* t3 += t2, carry -> t2 */
|
||||||
"movt %[t2] \n"
|
"movt %[t2] \n"
|
||||||
"mulu %[a], %[b] \n" /* b * d */
|
"mulu %[a], %[b] \n" /* b * d */
|
||||||
"mov %[t3], %[t1] \n" /* t2t3 <<= 16 */
|
"mov %[t3], %[t1] \n" /* t1t3 = t2t3 << 16 */
|
||||||
"xtrct %[t2], %[t1] \n"
|
"xtrct %[t2], %[t1] \n"
|
||||||
"mov %[t1], %[t2] \n"
|
|
||||||
"shll16 %[t3] \n"
|
"shll16 %[t3] \n"
|
||||||
"sts macl, %[t1] \n" /* lo = b * d */
|
"sts macl, %[t2] \n" /* lo = b * d */
|
||||||
"clrt \n" /* hi.lo += t2t3 */
|
"clrt \n" /* hi.lo += t1t3 */
|
||||||
"addc %[t3], %[t1] \n"
|
"addc %[t3], %[t2] \n"
|
||||||
"addc %[t2], %[r] \n"
|
"addc %[t1], %[r] \n"
|
||||||
: /* outputs */
|
: /* outputs */
|
||||||
[r] "=&r"(r),
|
[r] "=&r"(r),
|
||||||
[t1]"=&r"(t1),
|
[t1]"=&r"(t1),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue