*** empty log message ***
[cacao.git] / src / vm / jit / codegen.inc
index 4124842dac57c2ee64ef1b4a22d22d82c504c432..352af7972d2a18c606e9bf1d7be0886d6771e6f8 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 1735 2004-12-07 14:33:27Z twisti $
+   $Id: codegen.inc 1953 2005-02-17 13:42:23Z christian $
 
 */
 
@@ -314,6 +314,7 @@ static s4 dseg_adds8(codegendata *cd, s8 value)
 #endif
 
 
+#if !defined(__XDSPCORE__)
 static s4 dseg_addfloat_increase(codegendata *cd, float value)
 {
        dseg_increase(cd);
@@ -364,6 +365,7 @@ static s4 dseg_adddouble(codegendata *cd, double value)
 
        return -(cd->dseglen);
 }
+#endif /* !defined(__XDSPCORE__) */
 
 
 static void dseg_addtarget(codegendata *cd, basicblock *target)
@@ -856,43 +858,57 @@ static int reg_of_var(registerdata *rd, stackptr v, int tempregnum)
                if (!(v->flags & INMEMORY))
                        return(v->regoff);
                break;
+
        case STACKVAR:
                var = &(rd->interfaces[v->varnum][v->type]);
                v->regoff = var->regoff;
                if (!(var->flags & INMEMORY))
                        return(var->regoff);
                break;
+
        case LOCALVAR:
                var = &(rd->locals[v->varnum][v->type]);
                v->regoff = var->regoff;
                if (!(var->flags & INMEMORY))
                        return(var->regoff);
                break;
+
        case ARGVAR:
                v->regoff = v->varnum;
                if (IS_FLT_DBL_TYPE(v->type)) {
-                       if (v->varnum < rd->fltreg_argnum) {
+                       if (v->varnum < FLT_ARG_CNT) {
                                v->regoff = rd->argfltregs[v->varnum];
                                return(rd->argfltregs[v->varnum]);
                        }
 
+#if defined(__POWERPC__)
+                       v->regoff += 6;
+#else
+                       v->regoff -= FLT_ARG_CNT;
+#endif
+
                } else {
 #if defined(__POWERPC__)
-                       if (v->varnum < rd->intreg_argnum - (IS_2_WORD_TYPE(v->type) != 0)) {
+                       if (v->varnum < INT_ARG_CNT - (IS_2_WORD_TYPE(v->type) != 0)) {
 #else
-                       if (v->varnum < rd->intreg_argnum) {
+                       if (v->varnum < INT_ARG_CNT) {
 #endif
                                v->regoff = rd->argintregs[v->varnum];
                                return (rd->argintregs[v->varnum]);
                        }
-               }
+
 #if defined(__POWERPC__)
-               v->regoff += 6;
+                       v->regoff += 6;
 #else
-               v->regoff -= rd->intreg_argnum;
+                       v->regoff -= INT_ARG_CNT;
 #endif
+               }
                break;
        }
+#ifdef STATISTICS
+       if (opt_stat)
+               count_spills_read++;
+#endif
        v->flags |= INMEMORY;
        return tempregnum;
 }
@@ -1006,13 +1022,20 @@ static void codegen_resolve_native(methodinfo *m,void **insertionPoint,void *jmp
        void *lib;
        void *sym;
 
+#if defined(USE_THREADS)
   builtin_monitorenter((java_objectheader*) m);
+#endif
+
 #if defined(__X86_64__)
   if ((*((s4*)jmpPatchTarget))==((s4)jmpTarget)) {
 #else
   if ((*jmpPatchTarget)==jmpTarget) {
 #endif
+
+#if defined(USE_THREADS)
     builtin_monitorexit((java_objectheader*) m);
+#endif
+
     return;
   }
   /*log_text("trying to resolve a native method");
@@ -1077,7 +1100,11 @@ static void codegen_resolve_native(methodinfo *m,void **insertionPoint,void *jmp
 #else
       (*jmpPatchTarget)=jmpTarget;
 #endif
+
+#if defined(USE_THREADS)
       builtin_monitorexit((java_objectheader *) m );
+#endif
+
       return;
     }
 
@@ -1092,7 +1119,10 @@ static void codegen_resolve_native(methodinfo *m,void **insertionPoint,void *jmp
     info=(char*)MNEW(char,slen);
     sprintf(info,"%s.%s%s",m->class->name->text,m->name->text,m->descriptor->text);
     
+#if defined(USE_THREADS)
     builtin_monitorexit((java_objectheader *) m );
+#endif
+
     throw_cacao_exception_exit(string_java_lang_LinkageError,
                                                        info);
   }