Commit ecada8a2dddff7b0382e35b9ffe5643ed895a7f4

Authored by bellard
1 parent 1e8a7cfd

CR4.TSD flag support (Matt Schulkind)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1556 c046a42c-6fe2-441c-8c8c-71466251a162
target-i386/helper.c
@@ -2328,7 +2328,10 @@ void helper_invlpg(target_ulong addr) @@ -2328,7 +2328,10 @@ void helper_invlpg(target_ulong addr)
2328 void helper_rdtsc(void) 2328 void helper_rdtsc(void)
2329 { 2329 {
2330 uint64_t val; 2330 uint64_t val;
2331 - 2331 +
  2332 + if ((env->cr[4] & CR4_TSD_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) {
  2333 + raise_exception(EXCP0D_GPF);
  2334 + }
2332 val = cpu_get_tsc(env); 2335 val = cpu_get_tsc(env);
2333 EAX = (uint32_t)(val); 2336 EAX = (uint32_t)(val);
2334 EDX = (uint32_t)(val >> 32); 2337 EDX = (uint32_t)(val >> 32);
target-i386/translate.c
@@ -4909,7 +4909,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) @@ -4909,7 +4909,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
4909 gen_op_movl_T1_imu(offset); 4909 gen_op_movl_T1_imu(offset);
4910 } 4910 }
4911 goto do_lcall; 4911 goto do_lcall;
4912 - case 0xe9: /* jmp */ 4912 + case 0xe9: /* jmp im */
4913 if (dflag) 4913 if (dflag)
4914 tval = (int32_t)insn_get(s, OT_LONG); 4914 tval = (int32_t)insn_get(s, OT_LONG);
4915 else 4915 else
@@ -5366,6 +5366,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) @@ -5366,6 +5366,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
5366 } 5366 }
5367 break; 5367 break;
5368 case 0x131: /* rdtsc */ 5368 case 0x131: /* rdtsc */
  5369 + gen_jmp_im(pc_start - s->cs_base);
5369 gen_op_rdtsc(); 5370 gen_op_rdtsc();
5370 break; 5371 break;
5371 case 0x134: /* sysenter */ 5372 case 0x134: /* sysenter */