From: Jack Lange Date: Thu, 29 May 2008 22:20:37 +0000 (+0000) Subject: minor updates X-Git-Tag: boot386puppy-26-to-ide~35 X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=55c5cf8adebb870874e02b439b176f2b020ba5a0 minor updates --- diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index ec36284..a892094 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -82,14 +82,16 @@ } \ } while (0) \ -#define V3_CPU_KHZ(khz) \ - do { \ +#define V3_CPU_KHZ() \ + ({ \ + unsigned int khz = 0; \ extern struct vmm_os_hooks * os_hooks; \ if ((os_hooks) && (os_hooks)->get_cpu_khz) { \ khz = (os_hooks)->get_cpu_khz(); \ } \ - } while (0) \ - + khz; \ + }) \ + /* ** */ diff --git a/palacios/include/palacios/vmm_util.h b/palacios/include/palacios/vmm_util.h index 95a0c8e..38ae086 100644 --- a/palacios/include/palacios/vmm_util.h +++ b/palacios/include/palacios/vmm_util.h @@ -38,7 +38,7 @@ struct VMM_GPRs { void PrintTraceHex(unsigned char x); - +void PrintTraceLL(ullong_t num); void PrintTraceMemDump(unsigned char * start, int n); @@ -97,19 +97,38 @@ void PrintTraceMemDump(unsigned char * start, int n); * This ends up being the most efficient "calling * convention" on x86. */ -#define do_div(n,base) ({ \ - unsigned long __upper, __low, __high, __mod, __base; \ - __base = (base); \ - asm("":"=a" (__low), "=d" (__high):"A" (n)); \ - __upper = __high; \ - if (__high) { \ - __upper = __high % (__base); \ - __high = __high / (__base); \ - } \ - asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0" (__low), "1" (__upper)); \ - asm("":"=A" (n):"a" (__low),"d" (__high)); \ - __mod; \ -}) +#define do_div(n,base) ({ \ + unsigned long __upper, __low, __high, __mod, __base; \ + __base = (base); \ + asm("":"=a" (__low), "=d" (__high):"A" (n)); \ + __upper = __high; \ + if (__high) { \ + __upper = __high % (__base); \ + __high = __high / (__base); \ + } \ + asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0" (__low), "1" (__upper)); \ + asm("":"=A" (n):"a" (__low),"d" (__high)); \ + __mod; \ + }) + + + +/* This divides two 64bit unsigned ints + * The previous version only allows 32 bit bases(?)... + * + * NOTE: This absolutely sucks... there has to be a better way.... + */ +#define do_divll(n, base) ({ \ + ullong_t __rem = 0; \ + ullong_t __num = 0; \ + while (n > base) { \ + __num++; \ + n -= base; \ + } \ + __rem = n; \ + n = __num; \ + __rem; \ + }) #endif @@ -117,4 +136,6 @@ void PrintTraceMemDump(unsigned char * start, int n); + + #endif