5e: fix signed long multiply
This commit is contained in:
parent
e890c3d943
commit
3a322e9f32
1 changed files with 4 additions and 3 deletions
|
@ -367,11 +367,12 @@ multiplylong(u32int instr)
|
||||||
RdH = P->R + ((instr >> 16) & 15);
|
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)
|
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);
|
invalid(instr);
|
||||||
if(instr & (1<<22)) {
|
if(instr & (1<<22))
|
||||||
|
res = ((vlong)*(int*)Rs) * *(int*)Rm;
|
||||||
|
else {
|
||||||
res = *Rs;
|
res = *Rs;
|
||||||
res *= *Rm;
|
res *= *Rm;
|
||||||
} else
|
}
|
||||||
res = ((vlong)*(int*)Rs) * *(int*)Rm;
|
|
||||||
if(instr & (1<<21)) {
|
if(instr & (1<<21)) {
|
||||||
res += *RdL;
|
res += *RdL;
|
||||||
res += ((uvlong)*RdH) << 32;
|
res += ((uvlong)*RdH) << 32;
|
||||||
|
|
Loading…
Reference in a new issue