src/vm/cycles-stats.h: Switched from asm_get_cycle_count to md_get_cycle_count.
[cacao.git] / src / vm / jit / x86_64 / md.h
index f60e9720f6ba583088a9c6257c161879b7ed3439..68f99e57e88d3529630bfa20cc65e20c29f151ef 100644 (file)
@@ -1,6 +1,7 @@
 /* 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.
 
 #include <assert.h>
 #include <stdint.h>
 
-#include "vm/jit/codegen-common.h"
+#include "vm/jit/codegen-common.hpp"
 #include "vm/jit/methodtree.h"
 
 
 /* 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
@@ -82,9 +98,10 @@ inline static void *md_codegen_get_pv_from_pc(void *ra)
 
 *******************************************************************************/
 
-inline static void md_cacheflush(u1 *addr, s4 nbytes)
+inline static void md_cacheflush(void* addr, int nbytes)
 {
-       /* do nothing */
+       // Compiler optimization barrier (see PR97).
+       __asm__ __volatile__ ("" : : : "memory");
 }
 
 
@@ -94,9 +111,10 @@ inline static void md_cacheflush(u1 *addr, s4 nbytes)
 
 *******************************************************************************/
 
-inline static void md_icacheflush(u1 *addr, s4 nbytes)
+inline static void md_icacheflush(void* addr, int nbytes)
 {
-       /* do nothing */
+       // Compiler optimization barrier (see PR97).
+       __asm__ __volatile__ ("" : : : "memory");
 }
 
 
@@ -106,9 +124,27 @@ inline static void md_icacheflush(u1 *addr, s4 nbytes)
 
 *******************************************************************************/
 
-inline static void md_dcacheflush(u1 *addr, s4 nbytes)
+inline static void md_dcacheflush(void* addr, int nbytes)
+{
+       // Compiler optimization barrier (see PR97).
+       __asm__ __volatile__ ("" : : : "memory");
+}
+
+
+/* md_get_cycle_count **********************************************************
+
+   Get the current time-stamp counter from the CPU.
+
+*******************************************************************************/
+
+inline static uint64_t md_get_cycle_count()
 {
-       /* do nothing */
+       uint64_t cycles;
+
+       // Get current cycles count from the CPU.
+       __asm__ __volatile__ ("rdtsc" : "=A" (cycles));
+
+       return cycles;
 }
 
 #endif /* _VM_JIT_X86_64_MD_H */