* Removed all Id tags.
[cacao.git] / src / vm / jit / alpha / md-abi.c
index 1026f87adda794b7fc968187f80efde0e50b501c..2bc665662a31b3fed76332acc6aa5d8f13092798 100644 (file)
@@ -22,8 +22,6 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-abi.c 7335 2007-02-12 10:43:33Z twisti $
-
 */
 
 
@@ -64,6 +62,39 @@ const char *abi_registers_integer_name[] = {
        "t10", "t11", "ra",  "pv",  "at",  "gp",  "sp",  "zero"
 };
 
+const s4 abi_registers_integer_argument[] = {
+       16, /* a0  */
+       17, /* a1  */
+       18, /* a2  */
+       19, /* a3  */
+       20, /* a4  */
+       21, /* a5  */
+};
+
+const s4 abi_registers_integer_saved[] = {
+       9,  /* s0  */
+       10, /* s1  */
+       11, /* s2  */
+       12, /* s3  */
+       13, /* s4  */
+       14, /* s5  */
+       15, /* s6  */
+};
+
+const s4 abi_registers_integer_temporary[] = {
+       1,  /* t0  */
+       2,  /* t1  */
+       3,  /* t2  */
+       4,  /* t3  */
+       5,  /* t4  */
+       6,  /* t5  */
+       7,  /* t6  */
+       8,  /* t7  */
+       22, /* t8  */
+       23, /* t9  */
+       24, /* t10 */
+};
+
 
 s4 nregdescfloat[] = {
        REG_RET, REG_TMP, REG_SAV, REG_SAV, REG_SAV, REG_SAV, REG_SAV, REG_SAV,
@@ -74,6 +105,43 @@ s4 nregdescfloat[] = {
 };
 
 
+const s4 abi_registers_float_argument[] = {
+       16, /* fa0  */
+       17, /* fa1  */
+       18, /* fa2  */
+       19, /* fa3  */
+       20, /* fa4  */
+       21, /* fa5  */
+};
+
+const s4 abi_registers_float_saved[] = {
+       2,  /* fs0  */
+       3,  /* fs1  */
+       4,  /* fs2  */
+       5,  /* fs3  */
+       6,  /* fs4  */
+       7,  /* fs5  */
+       8,  /* fs6  */
+       9,  /* fs7  */
+};
+
+const s4 abi_registers_float_temporary[] = {
+       1,  /* ft0  */
+       10, /* ft1  */
+       11, /* ft2  */
+       12, /* ft3  */
+       13, /* ft4  */
+       14, /* ft5  */
+       15, /* ft6  */
+       22, /* ft7  */
+       23, /* ft8  */
+       24, /* ft9  */
+       25, /* ft10 */
+       26, /* ft11 */
+       27, /* ft12 */
+};
+
+
 /* md_param_alloc **************************************************************
 
    Allocate the parameters of the given method descriptor according to the
@@ -90,7 +158,7 @@ void md_param_alloc(methoddesc *md)
 
        /* set default values */
 
-       reguse = 0;
+       reguse    = 0;
        stacksize = 0;
 
        /* get params field of methoddesc */
@@ -104,13 +172,15 @@ void md_param_alloc(methoddesc *md)
                case TYPE_LNG:
                        if (i < INT_ARG_CNT) {
                                pd->inmemory = false;
-                               pd->regoff   = reguse;
+                               pd->index    = reguse;
+                               pd->regoff   = abi_registers_integer_argument[reguse];
                                reguse++;
                                md->argintreguse = reguse;
                        }
                        else {
                                pd->inmemory = true;
-                               pd->regoff   = stacksize;
+                               pd->index    = stacksize;
+                               pd->regoff   = stacksize * 8;
                                stacksize++;
                        }
                        break;
@@ -119,13 +189,15 @@ void md_param_alloc(methoddesc *md)
                case TYPE_DBL:
                        if (i < FLT_ARG_CNT) {
                                pd->inmemory = false;
-                               pd->regoff   = reguse;
+                               pd->index    = reguse;
+                               pd->regoff   = abi_registers_float_argument[reguse];
                                reguse++;
                                md->argfltreguse = reguse;
                        }
                        else {
                                pd->inmemory = true;
-                               pd->regoff   = stacksize;
+                               pd->index    = stacksize;
+                               pd->regoff   = stacksize * 8;
                                stacksize++;
                        }
                        break;