X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fi386%2Fmd.h;h=0756bb26a1db78dbc07a19eb7538b34116e9b38e;hb=d62d56aa9150bb2156dac82966795fdcbd7562e0;hp=562736be4f66d47c4fb2fd343d16a7d75a525a48;hpb=bbc14f3688db91816c8112c1a899c9a44c7305af;p=cacao.git diff --git a/src/vm/jit/i386/md.h b/src/vm/jit/i386/md.h index 562736be4..0756bb26a 100644 --- a/src/vm/jit/i386/md.h +++ b/src/vm/jit/i386/md.h @@ -1,6 +1,6 @@ /* src/vm/jit/i386/md.h - machine dependent i386 functions - Copyright (C) 1996-2005, 2006, 2007, 2008 + Copyright (C) 1996-2005, 2006, 2007, 2008, 2009 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -37,6 +37,30 @@ /* inline functions ***********************************************************/ +/** + * Returns the size (in bytes) of the current stackframe, specified by + * the passed codeinfo structure. + */ +inline static int32_t md_stacktrace_get_framesize(codeinfo* code) +{ + int32_t stackframesize; + + // Check for the asm_vm_call_method special case. + if (code == NULL) + return 0; + + // On i386 we use 8-byte stackslots. + stackframesize = code->stackframesize * 8; + + // If there is a stackframe present, we need to take the alignment + // compensation for the stored return address into account. + if (stackframesize != 0) + stackframesize += 4; + + return stackframesize; +} + + /* md_stacktrace_get_returnaddress ********************************************* Returns the return address of the current stackframe, specified by @@ -115,6 +139,23 @@ inline static void md_dcacheflush(void *addr, int nbytes) __asm__ __volatile__ ("" : : : "memory"); } + +/* md_get_cycle_count ********************************************************** + + Get the current time-stamp counter from the CPU. + +*******************************************************************************/ + +inline static uint64_t md_get_cycle_count() +{ + uint64_t cycles; + + // Get current cycles count from the CPU. + __asm__ __volatile__ ("rdtsc" : "=A" (cycles)); + + return cycles; +} + #endif /* _VM_JIT_I386_MD_H */