* codegen_createnativestub: passed wrong length to
[cacao.git] / src / vm / jit / codegen.inc
index c97de8303a733e790b9249ea782b381e09d8ca90..c42e4dcdf21ded20c24dd3a19353fd6ed301ed2e 100644 (file)
@@ -47,7 +47,7 @@
    memory. All functions writing values into the data area return the offset
    relative the begin of the code area (start of procedure).   
 
-   $Id: codegen.inc 2661 2005-06-13 14:17:37Z twisti $
+   $Id: codegen.inc 2734 2005-06-17 13:01:06Z twisti $
 
 */
 
@@ -55,6 +55,9 @@
 #include <assert.h>
 #include <string.h>
 
+#include "config.h"
+#include "types.h"
+
 #include "disass.h"
 
 #include "mm/memory.h"
 #endif
 
 #include "vm/exceptions.h"
+#include "vm/method.h"
 #include "vm/options.h"
 #include "vm/statistics.h"
 #include "vm/jit/codegen.inc.h"
+#include "vm/jit/jit.h"
 
 #undef JWDEBUG_X86
 
@@ -96,7 +101,7 @@ static int methodtree_comparator(const void *pc, const void *element,
 
 *******************************************************************************/
 
-void codegen_init()
+void codegen_init(void)
 {
 #if defined(__I386__) || defined(__X86_64__)
        /* this tree is global, not method specific */
@@ -219,7 +224,7 @@ void codegen_free(methodinfo *m, codegendata *cd)
 
 *******************************************************************************/
 
-void codegen_close()
+void codegen_close(void)
 {
        /* TODO: release avl tree on i386 and x86_64 */
 }
@@ -251,10 +256,8 @@ static void dseg_increase(codegendata *cd)
 
        newstorage = DMNEW(u1, cd->dsegsize * 2);
 
-       memcpy(newstorage + cd->dsegsize, cd->dsegtop - cd->dsegsize, cd->dsegsize);
-#if 0
-       MFREE(cd->dsegtop - cd->dsegsize, u1, cd->dsegsize);
-#endif
+       MCOPY(newstorage + cd->dsegsize, cd->dsegtop - cd->dsegsize, u1,
+                 cd->dsegsize);
 
        cd->dsegtop = newstorage;
        cd->dsegsize *= 2;
@@ -288,7 +291,7 @@ static s4 dseg_adds4(codegendata *cd, s4 value)
 }
 
 
-#if !defined(__I386__)
+#if !defined(__I386__) && !defined(__POWERPC__)
 static s4 dseg_adds8_increase(codegendata *cd, s8 value)
 {
        dseg_increase(cd);
@@ -382,6 +385,7 @@ static void dseg_addtarget(codegendata *cd, basicblock *target)
 }
 
 
+#if defined(__I386__) || defined(__X86_64__)
 static void dseg_adddata(codegendata *cd, u1 *ptr)
 {
        dataref *dr;
@@ -391,6 +395,7 @@ static void dseg_adddata(codegendata *cd, u1 *ptr)
        dr->next = cd->datareferences;
        cd->datareferences = dr;
 }
+#endif
 
 
 static void dseg_addlinenumbertablesize(codegendata *cd)
@@ -895,7 +900,7 @@ functionptr codegen_createnativestub(functionptr f, methodinfo *m)
 
 #if defined(STATISTICS)
        if (opt_stat)
-               count_nstub_len += m->mcodelength + cd->dseglen;
+               count_nstub_len += m->mcodelength;
 #endif
 
        /* release memory */
@@ -907,7 +912,12 @@ functionptr codegen_createnativestub(functionptr f, methodinfo *m)
 
        if (showdisassemble)
                codegen_disassemble_nativestub(m, (s4 *) (ptrint) m->stubroutine,
-                                                                          m->mcodelength);
+                                                                          m->mcodelength - cd->dseglen);
+
+       /* show data segment */
+
+       if (showddatasegment)
+               dseg_display(m, cd);
 
        /* return stubroutine entry point */