X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fx86_64%2Fmd.h;h=68f99e57e88d3529630bfa20cc65e20c29f151ef;hb=d62d56aa9150bb2156dac82966795fdcbd7562e0;hp=6495479a83f794fcdccf442809275630f85cf087;hpb=3a16b0602c73972b42f6db5280092e57e38b4287;p=cacao.git diff --git a/src/vm/jit/x86_64/md.h b/src/vm/jit/x86_64/md.h index 6495479a8..68f99e57e 100644 --- a/src/vm/jit/x86_64/md.h +++ b/src/vm/jit/x86_64/md.h @@ -1,6 +1,6 @@ /* src/vm/jit/x86_64/md.h - machine dependent x86_64 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,21 @@ /* 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) +{ + // Check for the asm_vm_call_method special case. + if (code == NULL) + return 0; + + // On x86_64 we use 8-byte stackslots. + return code->stackframesize * 8; +} + + /* md_stacktrace_get_returnaddress ********************************************* Returns the return address of the current stackframe, specified by @@ -115,6 +130,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_X86_64_MD_H */