#include #include "debug.h" #include "stringutils.h" #include "args.h" #include "kernelmisc.h" extern "C" BOOL KernelIoControl(DWORD dwCode, void *in, DWORD insize, void *out, DWORD outsize, DWORD *returned); #define DPLL_CTRL_ADDR 0xb80ecf00 #define DPLL_CTRL (*(volatile DWORD*)DPLL_CTRL_ADDR) #define setpll(div,mult) DPLL_CTRL = (DPLL_CTRL&~0xfe0)|(div<<5)|(mult<<7) bool set_cpu_speed(int div, int mult) { setpll(div,mult); return true; } DwordVector gencode(int n) { DwordVector v; v.push_back(0xe2500001); // subs r0,r0,1 for (int i=0 ; i DwordVector; typedef std::vector CodeList; typedef void(*pfn_test)(unsigned int n); int exceptfilter(EXCEPTION_POINTERS *e) { debug("exception: code=%08lx addr=%08lx: ", e->ExceptionRecord->ExceptionCode, e->ExceptionRecord->ExceptionAddress); for (int i=0 ; iExceptionRecord->NumberParameters ; i++) debug(" %08lx", e->ExceptionRecord->ExceptionInformation[i]); debug("\n"); return EXCEPTION_EXECUTE_HANDLER; } inline void callfn(pfn_test fn, unsigned int count) { //debug("calling %08lx, %d\n", fn, count); __try { fn(count); } __except(exceptfilter(GetExceptionInformation())) { DWORD *pdw= reinterpret_cast(fn); debug("fn %08lx:", fn); if (!IsBadReadPtr(pdw, 7*4)) debug(" %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", pdw[0], pdw[1], pdw[2], pdw[3], pdw[4], pdw[5], pdw[6]); else debug(" ?\n"); } } double calc_mhz(DWORD t, unsigned int count) { return (double)count/t/1000; } void run_cpu_test(int n, unsigned int count) { debugt("running test, n=%d, count=0x%x\n", n, count); CodeList tst; for (int i=0 ; i(&tst[i][0]), count); //reinterpret_cast(&tst[i][0])(count); t[i+1]= GetTickCount(); } DwordVector tdiff(n); for (int i=0 ; i