/* 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 ************************************************/
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[] = {
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 **************************************************************
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;
}