target-i386: fix decoding of negative 4-byte displacements
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 4 Jun 2010 14:27:33 +0000 (16:27 +0200)
committerBlue Swirl <blauwirbel@gmail.com>
Fri, 4 Jun 2010 19:48:53 +0000 (19:48 +0000)
Negative four byte displacements need to be sign-extended after
c086b783eb7a578993d6d2ab62c4c2666800b63d.  Do so.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
target-i386/translate.c

index 38c6016..708b0a1 100644 (file)
@@ -2016,7 +2016,7 @@ static void gen_lea_modrm(DisasContext *s, int modrm, int *reg_ptr, int *offset_
             break;
         default:
         case 2:
-            disp = ldl_code(s->pc);
+            disp = (int32_t)ldl_code(s->pc);
             s->pc += 4;
             break;
         }