diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-09-04 22:53:54 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-09-04 22:53:54 +0200 |
commit | 3a322e9f329909c3c751de6cb5da33e7280c2738 (patch) | |
tree | d904405093705cd4d1b983ad8669213549202c5c | |
parent | e890c3d9432a2dfbf238f3d60b7b3a96409ddd78 (diff) | |
download | plan9front-3a322e9f329909c3c751de6cb5da33e7280c2738.tar.xz |
5e: fix signed long multiply
-rw-r--r-- | sys/src/cmd/5e/arm.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/src/cmd/5e/arm.c b/sys/src/cmd/5e/arm.c index 0f8d0d7c7..bbede825c 100644 --- a/sys/src/cmd/5e/arm.c +++ b/sys/src/cmd/5e/arm.c @@ -367,11 +367,12 @@ multiplylong(u32int instr) RdH = P->R + ((instr >> 16) & 15); if(RdL == RdH || RdH == Rm || RdL == Rm || Rm == P->R + 15 || Rs == P->R + 15 || RdL == P->R + 15 || RdH == P->R + 15) invalid(instr); - if(instr & (1<<22)) { + if(instr & (1<<22)) + res = ((vlong)*(int*)Rs) * *(int*)Rm; + else { res = *Rs; res *= *Rm; - } else - res = ((vlong)*(int*)Rs) * *(int*)Rm; + } if(instr & (1<<21)) { res += *RdL; res += ((uvlong)*RdH) << 32; |