Moved baseval and diffval to classinfo. Can now run tst/testEx.java
authorstefan <none@none>
Wed, 12 Feb 2003 13:23:24 +0000 (13:23 +0000)
committerstefan <none@none>
Wed, 12 Feb 2003 13:23:24 +0000 (13:23 +0000)
12 files changed:
alpha/asmpart.S
alpha/ngen.c
builtin.c
global.h
headers.c
jit/stack.c
loader.c
src/cacaoh/headers.c
src/vm/builtin.c
src/vm/global.h
src/vm/jit/stack.c
src/vm/loader.c

index 1f294fe2801fcc33b099ae0c8f9d32afb3ddcc61..3f9a3d9217a8ab958728d45873dc46edebec23b7 100644 (file)
@@ -608,7 +608,7 @@ ex_table_loop:
        beq     a1,ex_handle_it       /* NULL catches everything                  */
 
        ldq     a0,offobjvftbl(xptr)  /* a0 = vftblptr(xptr)                      */
-       ldq     a1,offobjvftbl(a1)    /* a1 = vftblptr(catchtype) class (not obj) */
+       ldq     a0,offclass(a0)
        ldl     a0,offbaseval(a0)     /* a0 = baseval(xptr)                       */
        ldl     v0,offbaseval(a1)     /* a2 = baseval(catchtype)                  */
        ldl     a1,offdiffval(a1)     /* a1 = diffval(catchtype)                  */
index c644c94aa35413edd3d7cd64dd71e174eb05d6f1..39d245119e5aefa20c6cdc1d3817bb6b971e73be 100644 (file)
@@ -11,7 +11,7 @@
        Authors: Andreas  Krall      EMAIL: cacao@complang.tuwien.ac.at
                 Reinhard Grafl      EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: $Id: ngen.c 139 1999-11-11 19:21:30Z andi $
+       Last Change: $Id: ngen.c 227 2003-02-12 13:23:24Z stefan $
 
 *******************************************************************************/
 
@@ -3323,13 +3323,14 @@ makeactualcall:
                                                M_CMPULE(REG_ITMP1, REG_ITMP2, d);
                                                }
 */
-                                       M_BEQZ(s1, 7);
+                                       M_BEQZ(s1, 8);
                                        M_ALD(REG_ITMP1, s1, OFFSET(java_objectheader, vftbl));
-                                       a = dseg_addaddress ((void*) super->vftbl);
+                                       M_ALD(REG_ITMP1, REG_ITMP1, OFFSET(vftbl, class));
+                                       a = dseg_addaddress ((void*) super);
                                        M_ALD(REG_ITMP2, REG_PV, a);
-                                       M_ILD(REG_ITMP1, REG_ITMP1, OFFSET(vftbl, baseval));
-                                       M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl, baseval));
-                                       M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl, diffval));
+                                       M_ILD(REG_ITMP1, REG_ITMP1, OFFSET(classinfo, baseval));
+                                       M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(classinfo, baseval));
+                                       M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(classinfo, diffval));
                                        M_ISUB(REG_ITMP1, REG_ITMP3, REG_ITMP1);
                                        M_CMPULE(REG_ITMP1, REG_ITMP2, d);
                                        }
@@ -3397,21 +3398,22 @@ makeactualcall:
                                                M_BEQZ(REG_ITMP2, 0);
                                                }
 */
-                                       M_BEQZ(s1, 8 + (d == REG_ITMP3));
+                                       M_BEQZ(s1, 9 + (d == REG_ITMP3));
                                        M_ALD(REG_ITMP1, s1, OFFSET(java_objectheader, vftbl));
-                                       a = dseg_addaddress ((void*) super->vftbl);
+                                       M_ALD(REG_ITMP1, REG_ITMP1, OFFSET(vftbl, class));
+                                       a = dseg_addaddress ((void*) super);
                                        M_ALD(REG_ITMP2, REG_PV, a);
-                                       M_ILD(REG_ITMP1, REG_ITMP1, OFFSET(vftbl, baseval));
+                                       M_ILD(REG_ITMP1, REG_ITMP1, OFFSET(classinfo, baseval));
                                        if (d != REG_ITMP3) {
-                                               M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl, baseval));
-                                               M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl, diffval));
+                                               M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(classinfo, baseval));
+                                               M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(classinfo, diffval));
                                                M_ISUB(REG_ITMP1, REG_ITMP3, REG_ITMP1);
                                                }
                                        else {
-                                               M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl, baseval));
+                                               M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(classinfo, baseval));
                                                M_ISUB(REG_ITMP1, REG_ITMP2, REG_ITMP1);
                                                M_ALD(REG_ITMP2, REG_PV, a);
-                                               M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl, diffval));
+                                               M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(classinfo, diffval));
                                                }
                                        M_CMPULE(REG_ITMP1, REG_ITMP2, REG_ITMP2);
                                        M_BEQZ(REG_ITMP2, 0);
index 4da71058cc973a3bd57842d39c7c04c51fcf3614..7aea2d8eee2a4a97a444baed180b9e7972444731 100644 (file)
--- a/builtin.c
+++ b/builtin.c
@@ -138,8 +138,8 @@ s4 builtin_isanysubclass (classinfo *sub, classinfo *super)
        return 0;
        */
 
-       return (unsigned) (sub->vftbl->baseval - super->vftbl->baseval) <=
-                  (unsigned) (super->vftbl->diffval);
+       return (unsigned) (sub->baseval - super->baseval) <=
+                  (unsigned) (super->diffval);
 }
 
 
index aec14b81189964201226dc67cc9d2ad770aa370b..b9b4f7b2c254546ba5debe44fc42af186d258ccc 100644 (file)
--- a/global.h
+++ b/global.h
@@ -12,7 +12,7 @@
        Changes: Mark     Probst  (schani)   EMAIL: cacao@complang.tuwien.ac.at
                         Philipp  Tomsich (phil)     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: $Id: global.h 139 1999-11-11 19:21:30Z andi $
+       Last Change: $Id: global.h 227 2003-02-12 13:23:24Z stefan $
 
 *******************************************************************************/
 
@@ -522,6 +522,10 @@ struct classinfo {                /* class structure                          */
     innerclassinfo *innerclass;
 
     classinfo      *hashlink;         /* link for external hash chain         */
+
+       s4           baseval;              /* base for runtime type check         */
+       s4           diffval;              /* high - base for runtime type check  */
+
 };
 
 
@@ -589,9 +593,6 @@ struct vftbl {
        s4           vftbllength;          /* virtual function table length       */
        s4           interfacetablelength; /* interface table length              */
 
-       s4           baseval;              /* base for runtime type check         */
-       s4           diffval;              /* high - base for runtime type check  */
-
        s4          *interfacevftbllength; /* length of interface vftbls          */
        
        methodptr    table[1];             /* class vftbl                         */
index fd89b3e2bb41f278968c091c705bf2508b2b03dc..e81b65a40af698a6eae6fe94cba0f6c209eeb653 100644 (file)
--- a/headers.c
+++ b/headers.c
@@ -15,7 +15,7 @@
        Changes: Mark Probst         EMAIL: cacao@complang.tuwien.ac.at
                 Philipp Tomsich     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: $Id: headers.c 172 2002-12-03 21:11:29Z stefan $
+       Last Change: $Id: headers.c 227 2003-02-12 13:23:24Z stefan $
 
 *******************************************************************************/
 
@@ -533,8 +533,9 @@ int main(int argc, char **argv)
        fprintf (file, "#define offobjvftbl    %3d\n", (int) OFFSET(java_objectheader, vftbl));
        fprintf (file, "#define offarraysize   %3d\n", (int) OFFSET(java_arrayheader, size));
        fprintf (file, "#define offobjarrdata  %3d\n\n", (int) OFFSET(java_objectarray, data[0]));
-       fprintf (file, "#define offbaseval     %3d\n", (int) OFFSET(vftbl, baseval));
-       fprintf (file, "#define offdiffval     %3d\n", (int) OFFSET(vftbl, diffval));
+       fprintf (file, "#define offbaseval     %3d\n", (int) OFFSET(classinfo, baseval));
+       fprintf (file, "#define offdiffval     %3d\n", (int) OFFSET(classinfo, diffval));
+       fprintf (file, "#define offclass     %3d\n", (int) OFFSET(vftbl, class));
 
        fclose (file);
 
index 290f0b75abbdfbe0f13620b0c9cfe73d60233e44..b37299f086784f1b3376f112c5aab9435f199c5d 100644 (file)
@@ -1965,7 +1965,7 @@ static void show_icmd_method()
                                                if (c->flags & ACC_INTERFACE)
                                                        printf(" (INTERFACE) ");
                                                else
-                                                       printf(" (CLASS,%3d) ", c->vftbl->diffval);
+                                                       printf(" (CLASS,%3d) ", c->diffval);
                                                utf_fprint(stdout, c->name);
                                                }
                                        break;
index 4c499b31654244840a1e785c0c42da1751c31466..672396cd7816e5264e3cfcb472a656250c571213 100644 (file)
--- a/loader.c
+++ b/loader.c
@@ -2519,19 +2519,19 @@ static void loader_compute_class_values (classinfo *c)
 {
        classinfo *subs;
 
-       c->vftbl->baseval = ++classvalue;
+       c->baseval = ++classvalue;
        subs = c->sub;
        while (subs != NULL) {
                loader_compute_class_values(subs);
                subs = subs->nextsub;
                }
-       c->vftbl->diffval = classvalue - c->vftbl->baseval;
+       c->diffval = classvalue - c->baseval;
 /*
        {
        int i;
        for (i = 0; i < c->index; i++)
                printf(" ");
-       printf("%3d  %3d  ", (int) c->vftbl->baseval, c->vftbl->diffval);
+       printf("%3d  %3d  ", (int) c->baseval, c->diffval);
        utf_display(c->name);
        printf("\n");
        }
index fd89b3e2bb41f278968c091c705bf2508b2b03dc..e81b65a40af698a6eae6fe94cba0f6c209eeb653 100644 (file)
@@ -15,7 +15,7 @@
        Changes: Mark Probst         EMAIL: cacao@complang.tuwien.ac.at
                 Philipp Tomsich     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: $Id: headers.c 172 2002-12-03 21:11:29Z stefan $
+       Last Change: $Id: headers.c 227 2003-02-12 13:23:24Z stefan $
 
 *******************************************************************************/
 
@@ -533,8 +533,9 @@ int main(int argc, char **argv)
        fprintf (file, "#define offobjvftbl    %3d\n", (int) OFFSET(java_objectheader, vftbl));
        fprintf (file, "#define offarraysize   %3d\n", (int) OFFSET(java_arrayheader, size));
        fprintf (file, "#define offobjarrdata  %3d\n\n", (int) OFFSET(java_objectarray, data[0]));
-       fprintf (file, "#define offbaseval     %3d\n", (int) OFFSET(vftbl, baseval));
-       fprintf (file, "#define offdiffval     %3d\n", (int) OFFSET(vftbl, diffval));
+       fprintf (file, "#define offbaseval     %3d\n", (int) OFFSET(classinfo, baseval));
+       fprintf (file, "#define offdiffval     %3d\n", (int) OFFSET(classinfo, diffval));
+       fprintf (file, "#define offclass     %3d\n", (int) OFFSET(vftbl, class));
 
        fclose (file);
 
index 4da71058cc973a3bd57842d39c7c04c51fcf3614..7aea2d8eee2a4a97a444baed180b9e7972444731 100644 (file)
@@ -138,8 +138,8 @@ s4 builtin_isanysubclass (classinfo *sub, classinfo *super)
        return 0;
        */
 
-       return (unsigned) (sub->vftbl->baseval - super->vftbl->baseval) <=
-                  (unsigned) (super->vftbl->diffval);
+       return (unsigned) (sub->baseval - super->baseval) <=
+                  (unsigned) (super->diffval);
 }
 
 
index aec14b81189964201226dc67cc9d2ad770aa370b..b9b4f7b2c254546ba5debe44fc42af186d258ccc 100644 (file)
@@ -12,7 +12,7 @@
        Changes: Mark     Probst  (schani)   EMAIL: cacao@complang.tuwien.ac.at
                         Philipp  Tomsich (phil)     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: $Id: global.h 139 1999-11-11 19:21:30Z andi $
+       Last Change: $Id: global.h 227 2003-02-12 13:23:24Z stefan $
 
 *******************************************************************************/
 
@@ -522,6 +522,10 @@ struct classinfo {                /* class structure                          */
     innerclassinfo *innerclass;
 
     classinfo      *hashlink;         /* link for external hash chain         */
+
+       s4           baseval;              /* base for runtime type check         */
+       s4           diffval;              /* high - base for runtime type check  */
+
 };
 
 
@@ -589,9 +593,6 @@ struct vftbl {
        s4           vftbllength;          /* virtual function table length       */
        s4           interfacetablelength; /* interface table length              */
 
-       s4           baseval;              /* base for runtime type check         */
-       s4           diffval;              /* high - base for runtime type check  */
-
        s4          *interfacevftbllength; /* length of interface vftbls          */
        
        methodptr    table[1];             /* class vftbl                         */
index 290f0b75abbdfbe0f13620b0c9cfe73d60233e44..b37299f086784f1b3376f112c5aab9435f199c5d 100644 (file)
@@ -1965,7 +1965,7 @@ static void show_icmd_method()
                                                if (c->flags & ACC_INTERFACE)
                                                        printf(" (INTERFACE) ");
                                                else
-                                                       printf(" (CLASS,%3d) ", c->vftbl->diffval);
+                                                       printf(" (CLASS,%3d) ", c->diffval);
                                                utf_fprint(stdout, c->name);
                                                }
                                        break;
index 4c499b31654244840a1e785c0c42da1751c31466..672396cd7816e5264e3cfcb472a656250c571213 100644 (file)
@@ -2519,19 +2519,19 @@ static void loader_compute_class_values (classinfo *c)
 {
        classinfo *subs;
 
-       c->vftbl->baseval = ++classvalue;
+       c->baseval = ++classvalue;
        subs = c->sub;
        while (subs != NULL) {
                loader_compute_class_values(subs);
                subs = subs->nextsub;
                }
-       c->vftbl->diffval = classvalue - c->vftbl->baseval;
+       c->diffval = classvalue - c->baseval;
 /*
        {
        int i;
        for (i = 0; i < c->index; i++)
                printf(" ");
-       printf("%3d  %3d  ", (int) c->vftbl->baseval, c->vftbl->diffval);
+       printf("%3d  %3d  ", (int) c->baseval, c->diffval);
        utf_display(c->name);
        printf("\n");
        }