/* -----------------------------------------------------------------------------
- * $Id: StgCRun.c,v 1.5 1999/03/11 11:21:47 simonm Exp $
+ * $Id: StgCRun.c,v 1.9 1999/12/01 14:20:11 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
static jmp_buf jmp_environment;
-extern StgThreadReturnCode StgRun(StgFunPtr f)
+#if 0
+
+extern StgThreadReturnCode StgRun(StgFunPtr f, StgRegTable *basereg)
{
jmp_buf save_buf;
/* Save jmp_environment for previous call to miniInterpret */
memcpy((void *) jmp_environment, (void *) save_buf, sizeof(jmp_buf));
if (setjmp(jmp_environment) == 0) {
while ( 1 ) {
- IF_DEBUG(evaluator,
+ IF_DEBUG(evaluator,
fprintf(stderr,"Jumping to ");
printPtr((P_)f);
fprintf(stderr,"\n");
longjmp(jmp_environment, 1);
}
+#else
+
+extern StgThreadReturnCode StgRun(StgFunPtr f, StgRegTable *basereg)
+{
+ char* nm;
+ while ( f ) {
+
+#if 0
+ //IF_DEBUG(evaluator,
+ fprintf(stderr,"Jumping to ");
+ nm = nameOfObjSym ( f );
+ if (nm)
+ fprintf(stderr, "%s (%p)", nm, f); else
+ printPtr((P_)f);
+ fprintf(stderr,"\n");
+ // );
+if (0&& MainRegTable.rSp) {
+ int i;
+ StgWord* p = MainRegTable.rSp;
+fprintf(stderr, "SP = %p\n", p);
+ p += (8-1);
+ for (i = 0; i < 8; i++, p--)
+ fprintf (stderr, "-- %p: %p\n", p, *p );
+}
+#endif
+
+ f = (StgFunPtr) (f)();
+ }
+
+ return (StgThreadReturnCode)R1.i;
+}
+
+EXTFUN(StgReturn)
+{
+ return 0;
+}
+#endif
+
+
+
#else /* !USE_MINIINTERPRETER */
#ifdef LEADING_UNDERSCORE
#ifdef sparc_TARGET_ARCH
StgThreadReturnCode
-StgRun(StgFunPtr f) {
+StgRun(StgFunPtr f, StgRegTable *basereg) {
StgChar space[RESERVED_C_STACK_BYTES+sizeof(void *)];
register void *i7 __asm__("%i7");
#ifdef alpha_TARGET_ARCH
StgThreadReturnCode
-StgRun(StgFunPtr f)
+StgRun(StgFunPtr f, StgRegTable *basereg)
{
+ StgThreadReturnCode ret;
+
__asm__ volatile ("stq $9,-8($30)\n\t"
"stq $10,-16($30)\n\t"
"stq $11,-24($30)\n\t"
__asm__ volatile (".align 3\n"
".globl " STG_RETURN "\n"
STG_RETURN ":\n\t"
+ "lda %0,($14)\n\t" /* save R1 */
"lda $30,%0($30)\n\t"
"ldq $9,-8($30)\n\t"
"ldq $10,-16($30)\n\t"
"ldt $f6,-96($30)\n\t"
"ldt $f7,-104($30)\n\t"
"ldt $f8,-112($30)\n\t"
- "ldt $f9,-120($30)" : :
- "K" (RESERVED_C_STACK_BYTES+
+ "ldt $f9,-120($30)"
+ : "=r" (ret)
+ : "K" (RESERVED_C_STACK_BYTES+
8*sizeof(double)+8*sizeof(long)));
- return (StgThreadReturnCode)R1.i;
+ return ret;
}
#endif /* alpha_TARGET_ARCH */
#ifdef hppa1_1_TARGET_ARCH
StgThreadReturnCode
-StgRun(StgFunPtr f)
+StgRun(StgFunPtr f, StgRegTable *basereg)
{
StgChar space[RESERVED_C_STACK_BYTES+16*sizeof(long)+10*sizeof(double)];
- StgThredReturnCode ret;
+ StgThreadReturnCode ret;
__asm__ volatile ("ldo %0(%%r30),%%r19\n"
"\tstw %%r3, 0(0,%%r19)\n"
"\tldo 32(%%r19),%%r19\n"
"\tfldds -16(0,%%r19),%%fr20\n"
"\tfldds -8(0,%%r19),%%fr21\n"
- : "=r" (ret) /* result */
- : "n" (-(116 * sizeof(long) + 10 * sizeof(double)))
- : "%r19"
+ : "=r" (ret)
+ : "n" (-(116 * sizeof(long) + 10 * sizeof(double)))
+ : "%r19"
);
return ret;