* src/vm/jit/sparc64/codegen.c (codegen_emit_stub_native): Fixed the way
[cacao.git] / src / vm / jit / sparc64 / md-abi.c
index faee75458c44fc0232d5e48dc518697f5043895e..a7ea007bd2a0fe38bd54a5d1ef9b4cfeef123f83 100644 (file)
@@ -42,6 +42,8 @@
 #include "mm/memory.h"
 #include <assert.h>
 
+/* helper macros for allocation methods ***************************************/
+#define MIN(a,b) (((a) <= (b)) ? (a) : (b))
 
 /* register descripton array **************************************************/
 
@@ -216,12 +218,17 @@ void md_param_alloc_native(methoddesc *md)
        s4         i;
        s4         reguse;
        s4         stacksize;
+       s4         min_nat_regs;
 
        /* set default values */
 
        reguse = 0;
        stacksize = 6;
 
+       /* when we are above this, we have to increase the stacksize with every */
+       /* single argument to create the proper argument array                  */
+       min_nat_regs = MIN(INT_NATARG_CNT, FLT_NATARG_CNT);
+
        /* get params field of methoddesc */
 
        pd = md->params;
@@ -241,8 +248,10 @@ void md_param_alloc_native(methoddesc *md)
                                pd->inmemory = true;
                                pd->regoff = reguse;
                                reguse++;
-                               stacksize++;
                        }
+
+                       if (i >= min_nat_regs)
+                               stacksize++;
                        break;
                case TYPE_FLT:
                case TYPE_DBL:
@@ -255,8 +264,10 @@ void md_param_alloc_native(methoddesc *md)
                                pd->inmemory = true;
                                pd->regoff = reguse;
                                reguse++;
-                               stacksize++;
                        }
+
+                       if (i >= min_nat_regs)
+                               stacksize++;
                        break;
                }
        }