summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-09-04 22:53:54 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-09-04 22:53:54 +0200
commit3a322e9f329909c3c751de6cb5da33e7280c2738 (patch)
treed904405093705cd4d1b983ad8669213549202c5c
parente890c3d9432a2dfbf238f3d60b7b3a96409ddd78 (diff)
downloadplan9front-3a322e9f329909c3c751de6cb5da33e7280c2738.tar.xz
5e: fix signed long multiply
-rw-r--r--sys/src/cmd/5e/arm.c7
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;