|
From: Jeremy F. <je...@go...> - 2003-04-02 08:39:55
|
I tried out Mesa software rendering; it failed because V was missing movd reg, r/m. The fix is simple: (http://www.goop.org/~jeremy/valgrind/88-mmxfix.patch) Implement movd mm, r/m coregrind/vg_to_ucode.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff -puN coregrind/vg_to_ucode.c~88-mmxfix coregrind/vg_to_ucode.c --- valgrind/coregrind/vg_to_ucode.c~88-mmxfix Tue Apr 1 18:47:14 2003 +++ valgrind-jeremy/coregrind/vg_to_ucode.c Tue Apr 1 19:08:04 2003 @@ -4867,6 +4867,7 @@ static Addr disInstr ( UCodeBlock* cb, A } break; + case 0x7E: /* MOVD (src)mmxreg, (dst)mmxreg-or-mem */ case 0x7F: /* MOVQ (src)mmxreg, (dst)mmxreg-or-mem */ vg_assert(sz == 4); modrm = getUChar(eip); @@ -4882,7 +4883,8 @@ static Addr disInstr ( UCodeBlock* cb, A (((UShort)(opc)) << 8) | ((UShort)modrm), TempReg, tmpa); if (dis) - VG_(printf)("movq %s, %s\n", + VG_(printf)("mov%c %s, %s\n", + opc == 0x7e ? 'd' : 'q', nameMMXReg(gregOfRM(modrm)), dis_buf); } @@ -5022,9 +5024,9 @@ static Addr disInstr ( UCodeBlock* cb, A unimp2: VG_(printf)("disInstr: unhandled 2-byte opcode: " "0x%x 0x%x 0x%x\n", + (Int)getUChar(eip-2), (Int)getUChar(eip-1), - (Int)getUChar(eip+0), - (Int)getUChar(eip+1) ); + (Int)getUChar(eip-0) ); VG_(printf)("This _might_ be the result of executing a " "SSE, SSE2 or 3DNow!\n" ); _ |