* Removed all Id tags.
[cacao.git] / src / vm / jit / i386 / md-abi.c
index 4a780c6467d7d5196388c726b951ce95fd035c72..71f99b0b8d573151547282d80e33a9c01a18730c 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/i386/md-abi.c - functions for i386 Linux ABI
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Christian Ullrich
-
-   Changes: Christian Thalinger
-
-   $Id: md-abi.c 6260 2006-12-28 20:56:09Z twisti $
-
 */
 
 
 
 #include "vm/jit/i386/md-abi.h"
 
-#include "vm/descriptor.h"
 #include "vm/global.h"
+
 #include "vm/jit/abi.h"
 
+#include "vmcore/descriptor.h"
+
 
 /* register descripton - array ************************************************/
 
@@ -50,10 +44,23 @@ s4 nregdescint[] = {
     REG_END
 };
 
-char *regs[] = {
+const char *abi_registers_integer_name[] = {
        "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"
 };
 
+const s4 abi_registers_integer_argument[] = {
+       -1,
+};
+
+const s4 abi_registers_integer_saved[] = {
+       5, /* s0 */
+       6, /* s1 */
+       7, /* s2 */
+};
+
+const s4 abi_registers_integer_temporary[] = {
+       3, /* t0 */
+};
 
 
 s4 nregdescfloat[] = {
@@ -64,6 +71,18 @@ s4 nregdescfloat[] = {
     REG_END
 };
 
+const s4 abi_registers_float_argument[] = {
+       -1,
+};
+
+const s4 abi_registers_float_saved[] = {
+       -1,
+};
+
+const s4 abi_registers_float_temporary[] = {
+       -1,
+};
+
 
 /* md_param_alloc **************************************************************
 
@@ -85,19 +104,48 @@ s4 nregdescfloat[] = {
 void md_param_alloc(methoddesc *md)
 {
        paramdesc *pd;
-       s4        stacksize;
-       s4        i;
+       int        stacksize;
+       int        i;
 
        pd = md->params;
        stacksize = 0;
 
        for (i = 0; i < md->paramcount; i++, pd++) {
                pd->inmemory = true;
-               pd->regoff = stacksize;
-               stacksize += IS_2_WORD_TYPE(md->paramtypes[i].type) ? 2 : 1;
+               pd->index    = stacksize;
+               pd->regoff   = stacksize * 8;
+               stacksize++;
+       }
+
+       md->memuse       = stacksize;
+       md->argintreguse = 0;
+       md->argfltreguse = 0;
+}
+
+
+/* md_param_alloc_native *******************************************************
+
+   Pre-allocate arguments according the native ABI.
+
+*******************************************************************************/
+
+void md_param_alloc_native(methoddesc *md)
+{
+       paramdesc *pd;
+       int        stacksize;
+       int        i;
+
+       pd = md->params;
+       stacksize = 0;
+
+       for (i = 0; i < md->paramcount; i++, pd++) {
+               pd->inmemory  = true;
+               pd->index     = stacksize;
+               pd->regoff    = stacksize * 4;
+               stacksize    += IS_2_WORD_TYPE(md->paramtypes[i].type) ? 2 : 1;
        }
 
-       md->memuse = stacksize;
+       md->memuse       = stacksize;
        md->argintreguse = 0;
        md->argfltreguse = 0;
 }