+#if 1
+ /* save integer and float argument registers */
+
+ for (i = 0, j = 0; i < md->paramcount && i < INT_ARG_CNT; i++)
+ if (IS_INT_LNG_TYPE(md->paramtypes[i].type))
+ M_LST(rd->argintregs[i], REG_SP, j++ * 8);
+
+ for (i = 0; i < md->paramcount && i < FLT_ARG_CNT; i++)
+ if (IS_FLT_DBL_TYPE(md->paramtypes[i].type))
+ M_DST(rd->argfltregs[i], REG_SP, j++ * 8);
+
+ /* create native stackframe info */
+
+ M_AADD_IMM(REG_SP,
+ stackframesize * 8 - SIZEOF_VOID_P - sizeof(stackframeinfo),
+ rd->argintregs[0]);
+ M_MOV(REG_PV, rd->argintregs[1]);
+ M_AADD_IMM(REG_SP, stackframesize * 8, rd->argintregs[2]);
+ M_ALD(rd->argintregs[3], REG_SP, stackframesize * 8 - SIZEOF_VOID_P);
+ disp = dseg_addaddress(cd, stacktrace_create_native_stackframeinfo);
+ M_ALD(REG_ITMP3, REG_PV, disp);
+ M_JSR(REG_RA, REG_ITMP3);
+ M_NOP; /* XXX fill me! */
+
+ /* restore integer and float argument registers */
+
+ for (i = 0, j = 0; i < md->paramcount && i < INT_ARG_CNT; i++)
+ if (IS_INT_LNG_TYPE(md->paramtypes[i].type))
+ M_LLD(rd->argintregs[i], REG_SP, j++ * 8);
+
+ for (i = 0; i < md->paramcount && i < FLT_ARG_CNT; i++)
+ if (IS_FLT_DBL_TYPE(md->paramtypes[i].type))
+ M_DLD(rd->argfltregs[i], REG_SP, j++ * 8);
+#endif
+
+