5e: fix signed long multiply

This commit is contained in:
cinap_lenrek 2014-09-04 22:53:54 +02:00
parent e890c3d943
commit 3a322e9f32

View file

@ -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;