# HG changeset patch # User nkeynes # Date 1323688204 -36000 # Node ID dff55bdc4f46f7f9afc135749902327e8fcf95d7 # Parent ba3df0bf2c23f5f3a81bf739f31739673549e154 Fix MAC.W operand ordering - reads from Rn first, then Rm (per the manual) --- a/src/sh4/sh4core.in Mon Dec 12 09:54:27 2011 +1000 +++ b/src/sh4/sh4core.in Mon Dec 12 21:10:04 2011 +1000 @@ -665,9 +665,9 @@ sh4r.r[Rn] += 4; } else { CHECKRALIGN16( sh4r.r[Rn] ); - CHECKRALIGN16( sh4r.r[Rm] ); MEM_READ_WORD(sh4r.r[Rn], tmp); stmp = SIGNEXT16(tmp); + CHECKRALIGN16( sh4r.r[Rm] ); MEM_READ_WORD(sh4r.r[Rm], tmp); stmp = stmp * SIGNEXT16(tmp); sh4r.r[Rn] += 2; --- a/src/sh4/sh4x86.in Mon Dec 12 09:54:27 2011 +1000 +++ b/src/sh4/sh4x86.in Mon Dec 12 21:10:04 2011 +1000 @@ -1158,11 +1158,11 @@ // Note translate twice in case of page boundaries. Maybe worth // adding a page-boundary check to skip the second translation } else { - load_reg( REG_EAX, Rm ); + load_reg( REG_EAX, Rn ); check_ralign16( REG_EAX ); MEM_READ_WORD( REG_EAX, REG_EAX ); MOVL_r32_rspdisp( REG_EAX, 0 ); - load_reg( REG_EAX, Rn ); + load_reg( REG_EAX, Rm ); check_ralign16( REG_EAX ); MEM_READ_WORD( REG_EAX, REG_EAX ); ADDL_imms_rbpdisp( 2, REG_OFFSET(r[Rn]) );