From eee4f7dfc6f63f855cadde45491454943f082762 Mon Sep 17 00:00:00 2001 From: "Ronald G. Minnich" Date: Mon, 15 Apr 2002 03:58:03 +0000 Subject: [PATCH] added RDTSC support --- util/mkelfImage/Makefile | 4 +-- util/vgabios/x86emu/src/x86emu/ops2.c | 37 ++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/util/mkelfImage/Makefile b/util/mkelfImage/Makefile index 9940b7b281..1b984c4ea5 100644 --- a/util/mkelfImage/Makefile +++ b/util/mkelfImage/Makefile @@ -4,8 +4,8 @@ # that way it survives across cvs updates. # Then do a 'make install' # the result will be a directory tree that you can run mkelfImage in -PREFIX=/usr/local/ -PREFIX= /users/rminnich/src/bios/mkelf2 +#PREFIX=/usr/local/ +#PREFIX= /users/rminnich/src/bios/mkelf2 PERLPATH=/usr/bin/perl VERSION="1.12" DATE="26 January 2002" diff --git a/util/vgabios/x86emu/src/x86emu/ops2.c b/util/vgabios/x86emu/src/x86emu/ops2.c index 0ff4e2c37c..c3314a6d69 100644 --- a/util/vgabios/x86emu/src/x86emu/ops2.c +++ b/util/vgabios/x86emu/src/x86emu/ops2.c @@ -40,6 +40,7 @@ /* $XFree86: xc/extras/x86emu/src/x86emu/ops2.c,v 1.4 2000/11/16 19:44:50 eich Exp $ */ #include "x86emu/x86emui.h" +#include /*----------------------------- Implementation ----------------------------*/ @@ -62,6 +63,40 @@ void x86emuOp2_illegal_op( END_OF_INSTR(); } +/**************************************************************************** +REMARKS: +Handles opcode 0x0f,0x31 +****************************************************************************/ +void x86emuOp2_rdtsc(u8 op2) +{ + static unsigned long eax = 0, edx = 0; + char *name = 0; + + /* rdtsc */ + START_OF_INSTR(); + switch (op2) { + case 0x31: + name = "RDTSC\t"; + //rdtsc(eax, edx); + eax++; + if (eax == 0) + edx++; + M.x86.R_EAX = eax; + M.x86.R_EDX = edx; + break; + default: + DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE(0f)\n"); + TRACE_REGS(); + printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n", + M.x86.R_CS, M.x86.R_IP-2,op2); + HALT_SYS(); + break; + } + DECODE_PRINTF(name); + TRACE_AND_STEP(); + DECODE_CLEAR_SEGOVR(); + END_OF_INSTR(); +} #define xorl(a,b) ((a) && !(b)) || (!(a) && (b)) /**************************************************************************** @@ -2579,7 +2614,7 @@ void (*x86emu_optab2[256])(u8) = /* 0x2f */ x86emuOp2_illegal_op, /* 0x30 */ x86emuOp2_illegal_op, -/* 0x31 */ x86emuOp2_illegal_op, +/* 0x31 */ x86emuOp2_rdtsc, /* 0x32 */ x86emuOp2_illegal_op, /* 0x33 */ x86emuOp2_illegal_op, /* 0x34 */ x86emuOp2_illegal_op,