diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-08-21 10:28:44 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-08-21 10:28:44 +0000 |
commit | ecada8a2dddff7b0382e35b9ffe5643ed895a7f4 (patch) | |
tree | 0b7962d4c1e73e836eb1e8a7786209e9af49f024 /target-i386 | |
parent | 1e8a7cfd11385ee43ce28cca6b52f5834a4fff4a (diff) | |
download | hqemu-ecada8a2dddff7b0382e35b9ffe5643ed895a7f4.zip hqemu-ecada8a2dddff7b0382e35b9ffe5643ed895a7f4.tar.gz |
CR4.TSD flag support (Matt Schulkind)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1556 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-i386')
-rw-r--r-- | target-i386/helper.c | 5 | ||||
-rw-r--r-- | target-i386/translate.c | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/target-i386/helper.c b/target-i386/helper.c index c41cbb7..424dc52 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -2328,7 +2328,10 @@ void helper_invlpg(target_ulong addr) void helper_rdtsc(void) { uint64_t val; - + + if ((env->cr[4] & CR4_TSD_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) { + raise_exception(EXCP0D_GPF); + } val = cpu_get_tsc(env); EAX = (uint32_t)(val); EDX = (uint32_t)(val >> 32); diff --git a/target-i386/translate.c b/target-i386/translate.c index 619522a..0f6b0eb 100644 --- a/target-i386/translate.c +++ b/target-i386/translate.c @@ -4909,7 +4909,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) gen_op_movl_T1_imu(offset); } goto do_lcall; - case 0xe9: /* jmp */ + case 0xe9: /* jmp im */ if (dflag) tval = (int32_t)insn_get(s, OT_LONG); else @@ -5366,6 +5366,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) } break; case 0x131: /* rdtsc */ + gen_jmp_im(pc_start - s->cs_base); gen_op_rdtsc(); break; case 0x134: /* sysenter */ |