ref: 8314c9ffb59d8b8d07187c4deeb2dec50ea9e194
parent: 630fc5616ac6495ee5e3f0c75ac6862827c9a7fa
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Sep 4 18:53:54 EDT 2014
5e: fix signed long multiply
--- a/sys/src/cmd/5e/arm.c
+++ b/sys/src/cmd/5e/arm.c
@@ -367,11 +367,12 @@
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;
--
⑨