Hi,

as I've written ASAP here's the promised patch!

Please consider: this is a quite _fresh_ piece of 
software, perhaps not enough tested.

I am very _interested_ in your _feedback_.
Any kind of success story is very appreciated ;)

I want to say THANK YOU to all users who have informed me
about problems. 
Without YOUR feedback this work would not be possible.

(At last: a SORRY to all who have subscribed this list,
but are not interested in TYA.)

Cheers,
Albrecht



diff -u tya1.1/ChangeLog tya1.1v2/ChangeLog
--- tya1.1/ChangeLog    Fri Oct  9 21:27:21 1998
+++ tya1.1v2/ChangeLog  Thu Oct 15 21:33:20 1998
@@ -1,3 +1,40 @@
+Thu Oct 15 21:23:39 1998 Albrecht Kleine  <[EMAIL PROTECTED]>
+       -tyarecode.c
+        fixed athrow bug: more independence of EXCEPTION_BY_SIGNALS 
+        by CompTriggerNullPointerException2
+        [tnx bugreport to
+         Kazuyuki Shudo <[EMAIL PROTECTED]>]
+
+       -tyarecode.c
+       -tya.c
+        rejected a patch from #184 (as quick workaround
+        for jdk1.1.6v5)
+        [``different approach for getting signal context'']
+        
+Sun Oct 11 17:18:25 1998  Albrecht Kleine  <[EMAIL PROTECTED]>
+       -tya.c
+        rewrote method return value recognition in
+        InvokeCompiledMethod_Hook() misusing ACC_DOCED flag:
+        marked ``FIXME'' == subject of change
+
+       file #201 / patch mailed on blackdown list
+-----------------------------------------------------------------
+Sun Oct 11 11:32:25 1998  Albrecht Kleine  <[EMAIL PROTECTED]>
+       -tya.c,tyarecode.c
+        changed the conditions for possible method inlining
+       
+Sat Oct 10 17:50:04 1998  Ondrej Popp <[EMAIL PROTECTED]>
+Sat Oct 10 17:50:04 1998  Alexander Davydenko <[EMAIL PROTECTED]>
+       -tya.c
+        avoid a incompatible types in assignment 
+        compiler error
+       
+Sat Oct 10 17:50:04 1998  Albrecht Kleine  <[EMAIL PROTECTED]>
+       -tya.c
+        changed my typo from ``long'' to ``long long''
+
+       file #200A
+-----------------------------------------------------------------
 Fri Oct  9 20:25:46 1998  Albrecht Kleine  <[EMAIL PROTECTED]>
        ******************************
        *****  released TYA 1.1  *****
diff -u tya1.1/acconfig.h tya1.1v2/acconfig.h
--- tya1.1/acconfig.h   Fri Oct  9 21:27:21 1998
+++ tya1.1v2/acconfig.h Thu Oct 15 22:07:53 1998
@@ -80,4 +80,4 @@
  #define EASYEX
 #endif
 
-#define TYAVER "1.1"   // release version
+#define TYAVER "1.1v2" // release version
diff -u tya1.1/config.h.in tya1.1v2/config.h.in
--- tya1.1/config.h.in  Fri Oct  9 21:27:21 1998
+++ tya1.1v2/config.h.in        Thu Oct 15 22:08:10 1998
@@ -79,4 +79,4 @@
  #define EASYEX
 #endif
 
-#define TYAVER "1.1"   // release version
+#define TYAVER "1.1v2" // release version
Common subdirectories: tya1.1/demo and tya1.1v2/demo
diff -u tya1.1/tya.c tya1.1v2/tya.c
--- tya1.1/tya.c        Fri Oct  9 21:27:21 1998
+++ tya1.1v2/tya.c      Thu Oct 15 20:56:58 1998
@@ -486,15 +486,20 @@
    // invoke.....
    if (mb->fb.access & ACC_XXUNUSED3)  // pseudo result type 64bit
      {
-       *(long long *)(&ee->current_frame->optop[0])=((long(*)(void)) 
mb->CompiledCode)();
+       *(long long *)(&ee->current_frame->optop[0])=((long long(*)(void)) 
+mb->CompiledCode)();
        ee->current_frame->optop+=2;
      }
      else
      {
-       ee->current_frame->optop[0]=((int(*)(void)) mb->CompiledCode)();
-       ee->current_frame->optop++;
+       if (mb->fb.access & ACC_DOCED)  // void result
+         ((void(*)(void))mb->CompiledCode)();
+       else
+       {
+//       *(int *) (&ee->current_frame->optop[0])=((int(*)(void))mb->CompiledCode)();
+         ee->current_frame->optop[0].i=((int(*)(void)) mb->CompiledCode)();
+         ee->current_frame->optop++;
+       }
      }
-   
    ee->current_frame->vars=oldvar;     // reset to old variable
    ee->current_frame->current_method=mbcaller;
 #ifdef DEBUG
@@ -580,7 +585,7 @@
 #else   
    struct execenv * ee = EE();
    TYA_SIGCONTEXT * context=NULL;
-#if 0
+#if 1
    // at all FIXME: unknown uc pointer
    #define MAXSEARCH 100
    int *ptr=(int*)uc-MAXSEARCH;
@@ -588,7 +593,7 @@
 #endif   
    asm ("pushl %esp");
    asm ("popl anOldsp");
-#if 0
+#if 1
    //lprintf("TYA: %x\n",oldesp);
    // grep for a sigcontext_struct
    if ( sig == SIGSEGV  ||  sig == SIGFPE )
@@ -644,7 +649,7 @@
    dprintf(stderr, "current_method =%p\n",ee->current_frame->current_method);
    dprintf(stderr, "CompiledCode = %p\n",startOfCode);
 #endif
-
+   fprintf(stderr, "current_method =%s\n",ee->current_frame->current_method->fb.name);
  // all this global variables could be locals, but how can I reference locals
  // in AT&T asm ?
 
@@ -894,7 +899,9 @@
    cinfo->ipcnt = 0;
    cinfo->backcnt = 0;
    cinfo->wide  = FALSE;
-   cinfo->inlineerr = FALSE;
+   cinfo->inlineerr = mb->exception_table_length!=0;
+   // don't inline if there are catchframes on caller side
+
    
    if (!ProcessExceptionTab(mb ,cinfo))
      {
@@ -1190,20 +1197,24 @@
        // store a copy of original invoker
         klass->methods[i].invoker=MYInvokeCompiledMethod;
        
-//     j=klass->methods[i].fb.signature[ 
-//             strlen(klass->methods[i].fb.signature) -1];
-       
+       // some shortcuts for result type: faster but not neccessary
+       // using ACC_DOCED here is a temp. misuse / FIXME FIXME FIXME FIXME
        m=0;
        while (klass->methods[i].fb.signature[m]!=SIGNATURE_ENDFUNC)
         m++;
        m++;
        j=klass->methods[i].fb.signature[ m ];
        
-       if (j=='D' && j=='J')
+       if (j=='D' || j=='J')
           klass->methods[i].fb.access |= ACC_XXUNUSED3;            // pseudo result 
type 64bit
        else
+         {
+         if (j=='V')
+           klass->methods[i].fb.access |= ACC_DOCED;       // void result
+         else
+           klass->methods[i].fb.access &= ((short)~ACC_DOCED);
          klass->methods[i].fb.access &= ((short)~ACC_XXUNUSED3);
-         
+         }
      }
   dprintf(stderr,"---------------END CompileClass_Hook-----------------------\n");
   return 1;            
diff -u tya1.1/tyarecode.c tya1.1v2/tyarecode.c
--- tya1.1/tyarecode.c  Fri Oct  9 21:27:21 1998
+++ tya1.1v2/tyarecode.c        Tue Oct 13 20:03:41 1998
@@ -1389,10 +1389,10 @@
                CL(stac - SIS4);
              }
            }
-         }
 #ifndef EXCEPTIONS_BY_SIGNALS
        CompTriggerNullPointerException(cinfo, EAX);
-#endif    
+#endif      
+         }
        //
        // 3A. =================== try to inline ===================
        //
@@ -1406,7 +1406,7 @@
            // this test is independend EXCEPTIONS_BY_SIGNALS
           if (VIRTUAL_INV(code))
             CompTriggerNullPointerException2(cinfo,EAX);
-#endif      
+#endif
 #ifdef INLINING
            if (mbp->CompiledCodeInfo == invokeJavaMethod)      // no synchron, no 
native
              if (!cinfo->isinline)                     // no recursive inlining
@@ -1862,7 +1862,8 @@
        break;
 
       case 0xBF:       // athrow
-       CompTriggerNullPointerException(cinfo,EAX);
+       // this test is independend EXCEPTIONS_BY_SIGNALS
+       CompTriggerNullPointerException2(cinfo,EAX);
        CompTriggerAthrowException(cinfo);
        dprintf(stderr,"athrow athrow athrow\n");
        break;
@@ -1947,7 +1948,7 @@
 // If we ever write own monitorEnter/Exit we could pass directly EAX instead of
 // stack
       case 0xC2:
-       CompTriggerNullPointerException(cinfo,EAX);
+       CompTriggerNullPointerException2(cinfo,EAX);
        CB(PUSHAX);
        CB(MOV_BX);
        CL(monitorEnter);
@@ -1957,6 +1958,7 @@
        break;
 
       case 0xC3:
+       CompTriggerNullPointerException2(cinfo,EAX);
        CB(PUSHAX);
        CB(MOV_BX);
        CL(monitorExit);
@@ -1993,6 +1995,7 @@
                     CB(PUSHAX);CB(PUSHBX);CB(PUSHCX);CB(PUSHDX);break;
              default:lprintf("TYA: Too much dimensions: %d in opcode %x\n",m,code);
                    return -1;
+                   // no problem: this method should run interpreted
             }
        //
        // calling MultiArrayAlloc(int dimensions, ClassClass *, stack_item *sizes)
diff -u tya1.1/tyaruntime.c tya1.1v2/tyaruntime.c
--- tya1.1/tyaruntime.c Fri Oct  9 21:27:21 1998
+++ tya1.1v2/tyaruntime.c       Tue Oct 13 20:48:56 1998
@@ -124,7 +124,9 @@
 //      
 HObject *MyObjAlloc(ClassClass *dcb)
 {
-   HObject *o=ObjAlloc(dcb,0);
+   HObject *o;
+   dprintf(stderr,"MyObjAlloc %p\n",dcb);
+   o=ObjAlloc(dcb,0);
    if (o)
       memset(unhand(o),0,unha11(dcb)->instance_size);
    return o;

Reply via email to