st mptr, 3*4(sp) /* mptr/itmp2 is callee saved in terms of C abi */
st pv, 4*4(sp)
st a4, 5*4(sp) /* a4 is callee saved in terms of C abi */
- st ra, 6*4(sp)
+ std ftmp1, 6*4(sp) /* ftmp1 and ftmp2 are callees saved in terms of C abi */
+ std ftmp2, 8*4(sp)
+ st ra, 10*4(sp)
lr s0, a1 /* data structure */
lr %r0, a2 /* number of stack arguments */
l mptr, 3*4(sp)
l pv, 4*4(sp)
l a4, 5*4(sp)
- l ra, 6*4(sp)
+ ld ftmp1, 6*4(sp)
+ ld ftmp2, 8*4(sp)
+ l ra, 10*4(sp)
ahi sp, 8*4 /* remove stackframe */
br ra /* return */
/* create dynamic stack info */
- N_MOV(REG_SP, REG_A0); /* currentsp */
+ M_MOV(REG_SP, REG_A0); /* currentsp */
N_LA(REG_A1, -N_PV_OFFSET, RN, REG_PV); /* pv */
disp = dseg_add_functionptr(cd, codegen_start_native_call);
/* remove native stackframe info */
- N_MOV(REG_SP, REG_A0); /* currentsp */
+ M_MOV(REG_SP, REG_A0); /* currentsp */
N_LA(REG_A1, -N_PV_OFFSET, RN, REG_PV); /* pv */
disp = dseg_add_functionptr(cd, codegen_finish_native_call);
M_ALD_DSEG(REG_ITMP1, disp);
*/
-
#include "config.h"
-#include "vm/types.h"
+#include "vm/global.h"
+#include "vm/jit/jit.h"
#include "vm/jit/s390/md-abi.h"
+#include "vm/types.h"
#include "vmcore/descriptor.h"
-#include "vm/global.h"
-#include "vm/jit/jit.h"
+#include <assert.h>
/* register descripton array **************************************************/
};
s4 nregdescfloat[] = {
- REG_ARG, REG_TMP, REG_ARG, REG_TMP, REG_SAV, REG_TMP, REG_SAV, REG_TMP,
+ REG_ARG, REG_TMP, REG_ARG, REG_TMP, REG_RES, REG_TMP, REG_RES, REG_TMP,
REG_TMP, REG_TMP, REG_TMP, REG_TMP, REG_TMP, REG_TMP, REG_TMP, REG_TMP,
REG_END
};
};
const s4 abi_registers_float_saved[] = {
- 4, /* f4 */
- 6 /* f6 */
+ -1 /* none */
};
const s4 abi_registers_float_temporary[] = {
#define INT_RES_CNT 5 /* number of integer reserved registers */
#define FLT_REG_CNT 16 /* number of float registers */
-#define FLT_SAV_CNT 2 /* number of float callee saved registers */
+#define FLT_SAV_CNT 0 /* number of float callee saved registers */
#define FLT_ARG_CNT 2 /* number of float argument registers */
#define FLT_TMP_CNT 12 /* number of float temporary registers */
-#define FLT_RES_CNT 0 /* number of float reserved registers */
+#define FLT_RES_CNT 2 /* number of float reserved registers */
#define TRACE_ARGS_NUM 8
#define fa0 %f0
#define fa1 %f2
+#define ftmp1 %r4
+#define ftmp2 %r6
/* save and restore macros ****************************************************/