]> xenbits.xensource.com Git - qemu-xen-4.4-testing.git/commitdiff
fixed lea exception
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 16 Feb 2004 22:10:33 +0000 (22:10 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 16 Feb 2004 22:10:33 +0000 (22:10 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@622 c046a42c-6fe2-441c-8c8c-71466251a162

target-i386/translate.c

index 0bbd160b420ff01e2ee6948a5b99b1165b938abd..6e8d8116c7df20f7f63d09947e14c6a4897d97fe 100644 (file)
@@ -2554,6 +2554,9 @@ static uint8_t *disas_insn(DisasContext *s, uint8_t *pc_start)
     case 0x8d: /* lea */
         ot = dflag ? OT_LONG : OT_WORD;
         modrm = ldub_code(s->pc++);
+        mod = (modrm >> 6) & 3;
+        if (mod == 3)
+            goto illegal_op;
         reg = (modrm >> 3) & 7;
         /* we must ensure that no segment is added */
         s->override = -1;
@@ -2815,7 +2818,6 @@ static uint8_t *disas_insn(DisasContext *s, uint8_t *pc_start)
         mod = (modrm >> 6) & 3;
         rm = modrm & 7;
         op = ((b & 7) << 3) | ((modrm >> 3) & 7);
-
         if (mod != 3) {
             /* memory op */
             gen_lea_modrm(s, modrm, &reg_addr, &offset_addr);
@@ -4479,7 +4481,7 @@ static inline int gen_intermediate_code_internal(CPUState *env,
     pc_start = (uint8_t *)tb->pc;
     cs_base = (uint8_t *)tb->cs_base;
     flags = tb->flags;
-       
+
     dc->pe = (flags >> HF_PE_SHIFT) & 1;
     dc->code32 = (flags >> HF_CS32_SHIFT) & 1;
     dc->ss32 = (flags >> HF_SS32_SHIFT) & 1;