Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: md-abi.c 7248 2007-01-29 19:28:12Z twisti $
+ $Id: md-abi.c 7630 2007-04-02 19:56:14Z twisti $
*/
#include "vm/global.h"
+#include "vm/jit/jit.h" /* for REG_* (maybe can be removed) */
+
#include "vmcore/descriptor.h"
REG_END
};
-char *regs[] = {
+const char *abi_registers_integer_name[] = {
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
};
+const s4 abi_registers_integer_argument[] = {
+ 7, /* a0 */
+ 6, /* a1 */
+ 2, /* a2 */
+ 1, /* a3 */
+ 8, /* a4 */
+ 9, /* a5 */
+};
+
+const s4 abi_registers_integer_saved[] = {
+ 7, /* s0 */
+ 12, /* s1 */
+ 13, /* s2 */
+ 14, /* s3 */
+ 15, /* s4 */
+};
+
+const s4 abi_registers_integer_temporary[] = {
+ 3, /* t0 */
+};
+
s4 nregdescfloat[] = {
REG_ARG, REG_ARG, REG_ARG, REG_ARG, REG_ARG, REG_ARG, REG_ARG, REG_ARG,
if (iarg < INT_ARG_CNT) {
pd->inmemory = false;
pd->regoff = iarg;
+ iarg++;
}
else {
pd->inmemory = true;
pd->regoff = stacksize;
- }
- if (iarg < INT_ARG_CNT)
- iarg++;
- else
stacksize++;
+ }
break;
case TYPE_FLT:
if (farg < FLT_ARG_CNT) {
pd->inmemory = false;
pd->regoff = farg;
+ farg++;
}
else {
pd->inmemory = true;
pd->regoff = stacksize;
- }
- if (farg < FLT_ARG_CNT)
- farg++;
- else
stacksize++;
+ }
break;
}
}
}
+/* md_param_alloc_native *******************************************************
+
+ Pre-allocate arguments according the native ABI.
+
+*******************************************************************************/
+
+void md_param_alloc_native(methoddesc *md)
+{
+ /* On x86_64 we use the same ABI for JIT method calls as for
+ native method calls. */
+
+ md_param_alloc(md);
+}
+
+
/* md_return_alloc *************************************************************
Precolor the Java Stackelement containing the Return Value. Only