added i386 stuff with #ifdef's
[cacao.git] / src / vm / jit / stack.c
index dd9fc35dd1a73d2ffc16bd7d1cda4a2a6a34001f..2ebbe2b179602afffa7f045368f9febb90e6142b 100644 (file)
@@ -1110,7 +1110,7 @@ icmd_lconst_lcmp_tail:
                                                /* pop 3 push 4 dup */
                                                
                                                case ICMD_DUP_X2:
-                                                       if (IS_2_WORD_TYPE(curstack[-1].type)) {
+                                                       if (IS_2_WORD_TYPE(curstack->prev->type)) {
                                                                iptr->opc = ICMD_DUP_X1;
                                                                DUP_X1;
                                                                }
@@ -1121,7 +1121,7 @@ icmd_lconst_lcmp_tail:
 
                                                case ICMD_DUP2_X2:
                                                        if (IS_2_WORD_TYPE(curstack->type)) {
-                                                               if (IS_2_WORD_TYPE(curstack[-1].type)) {
+                                                               if (IS_2_WORD_TYPE(curstack->prev->type)) {
                                                                        iptr->opc = ICMD_DUP_X1;
                                                                        DUP_X1;
                                                                        }
@@ -1131,7 +1131,7 @@ icmd_lconst_lcmp_tail:
                                                                        }
                                                                }
                                                        else
-                                                               if (IS_2_WORD_TYPE(curstack[-2].type)) {
+                                                               if (IS_2_WORD_TYPE(curstack->prev->prev->type)) {
                                                                        iptr->opc = ICMD_DUP2_X1;
                                                                        DUP2_X1;
                                                                        }
@@ -1719,11 +1719,11 @@ static void show_icmd_method()
        xtable *ex;
 
        printf("\n");
-       unicode_fprint(stdout, class->name);
+       utf_fprint(stdout, class->name);
        printf(".");
-       unicode_fprint(stdout, method->name);
+       utf_fprint(stdout, method->name);
        printf(" ");
-       unicode_fprint(stdout, method->descriptor);
+       utf_fprint(stdout, method->descriptor);
        printf ("\n\nMax locals: %d\n", (int) maxlocals);
        printf ("Max stack:  %d\n", (int) maxstack);
 
@@ -1783,11 +1783,24 @@ static void show_icmd_method()
        printf("\n");
 
        if (showdisassemble) {
+#ifdef __I386__
+               extern s4 *codestatic;
+               extern int pstatic;
+
+               s4ptr = (s4 *) (method->mcode + dseglen);
+               for (i = 0; i < block[0].mpc; i++, ((s4) s4ptr)++) {
+                       disassinstr((s4) s4ptr, i);
+                       i = pstatic;
+                       s4ptr = codestatic;
+               }
+               printf("\n");
+#else
                s4ptr = (s4 *) (method->mcode + dseglen);
                for (i = 0; i < block[0].mpc; i += 4, s4ptr++) {
                        disassinstr(*s4ptr, i); 
                        }
                printf("\n");
+#endif
                }
 
        
@@ -1864,7 +1877,7 @@ static void show_icmd_method()
                                case ICMD_PUTSTATIC:
                                case ICMD_GETSTATIC:
                                        printf(" ");
-                                       unicode_fprint(stdout,
+                                       utf_fprint(stdout,
                                                        ((fieldinfo *) iptr->val.a)->name);
                                        break;
                                case ICMD_IINC:
@@ -1907,7 +1920,7 @@ static void show_icmd_method()
                                        break;
                                case ICMD_NEW:
                                        printf(" ");
-                                       unicode_fprint(stdout,
+                                       utf_fprint(stdout,
                                                       ((classinfo *) iptr->val.a)->name);
                                        break;
                                case ICMD_NEWARRAY:
@@ -1941,7 +1954,7 @@ static void show_icmd_method()
                                case ICMD_ANEWARRAY:
                                        if (iptr->op1) {
                                                printf(" ");
-                                               unicode_fprint(stdout,
+                                               utf_fprint(stdout,
                                                               ((classinfo *) iptr->val.a)->name);
                                                }
                                        break;
@@ -1953,7 +1966,7 @@ static void show_icmd_method()
                                                        printf(" (INTERFACE) ");
                                                else
                                                        printf(" (CLASS,%3d) ", c->vftbl->diffval);
-                                               unicode_fprint(stdout, c->name);
+                                               utf_fprint(stdout, c->name);
                                                }
                                        break;
                                case ICMD_BUILTIN3:
@@ -1966,10 +1979,10 @@ static void show_icmd_method()
                                case ICMD_INVOKESTATIC:
                                case ICMD_INVOKEINTERFACE:
                                        printf(" ");
-                                       unicode_fprint(stdout,
+                                       utf_fprint(stdout,
                                                       ((methodinfo *) iptr->val.a)->class->name);
                                        printf(".");
-                                       unicode_fprint(stdout,
+                                       utf_fprint(stdout,
                                                       ((methodinfo *) iptr->val.a)->name);
                                        break;
                                case ICMD_IFEQ:
@@ -2044,6 +2057,31 @@ static void show_icmd_method()
                        }
 
                if (showdisassemble && (!deadcode)) {
+#ifdef __I386__
+                       extern s4 *codestatic;
+                       extern int pstatic;
+
+                       printf("\n");
+                       i = bptr->mpc;
+                       s4ptr = (s4 *) (method->mcode + dseglen + i);
+
+                       if (bptr->next != NULL) {
+                               for (; i < bptr->next->mpc; i++, ((s4) s4ptr)++) {
+                                       disassinstr((s4) s4ptr, i); 
+                                       i = pstatic;
+                                       s4ptr = codestatic;
+                               }
+                               printf("\n");
+
+                       } else {
+                               for (; s4ptr < (s4 *) (method->mcode + method->mcodelength); i++, ((s4) s4ptr)++) {
+                                       disassinstr((s4) s4ptr, i); 
+                                       i = pstatic;
+                                       s4ptr = codestatic;
+                               }
+                               printf("\n");
+                       }
+#else
                        printf("\n");
                        i = bptr->mpc;
                        s4ptr = (s4 *) (method->mcode + dseglen + i);
@@ -2060,6 +2098,7 @@ static void show_icmd_method()
                                    }
                                printf("\n");
                            }
+#endif
                    }
        }