X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FStgCRun.c;h=9d80bdbf6414fb59b6d375cba27ca890daa11d71;hb=3cdb0ada5aecbcbe940bacf577c02c41bc65c629;hp=98116abfddaeb6300f01f991dcc058b0b984f0ec;hpb=edad06244b0a542d6b5c9ce3f3cd72941c5be804;p=ghc-hetmet.git diff --git a/rts/StgCRun.c b/rts/StgCRun.c index 98116ab..9d80bdb 100644 --- a/rts/StgCRun.c +++ b/rts/StgCRun.c @@ -50,6 +50,7 @@ * in libc.a clobbers $s6. */ #include "ghcconfig.h" +#ifndef USE_MINIINTERPRETER #ifdef alpha_HOST_ARCH #define alpha_EXTRA_CAREFUL register long fake_ra __asm__("$26"); @@ -60,6 +61,7 @@ register double fake_f8 __asm__("$f8"); register double fake_f9 __asm__("$f9"); #endif #endif +#endif /* include Stg.h first because we want real machine regs in here: we * have to get the value of R1 back from Stg land to C land intact. @@ -899,4 +901,37 @@ StgRunIsImplementedInAssembler(void) #endif +/* ----------------------------------------------------------------------------- + MIPS architecture + -------------------------------------------------------------------------- */ + +#ifdef mips_HOST_ARCH + +StgThreadReturnCode +StgRun(StgFunPtr f, StgRegTable *basereg) +{ + register StgThreadReturnCode __v0 __asm__("$2"); + + __asm__ __volatile__( + " la $25, %1 \n" + " move $30, %2 \n" + " jr %1 \n" + " .align 3 \n" + " .globl " STG_RETURN " \n" + " .aent " STG_RETURN " \n" + STG_RETURN ": \n" + " move %0, $16 \n" + " move $3, $17 \n" + : "=r" (__v0), + : "r" (f), "r" (basereg) + "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", + "$25", "$28", "$30", + "$f20", "$f22", "$f24", "$f26", "$f28", "$f30", + "memory"); + + return __v0; +} + +#endif /* mips_HOST_ARCH */ + #endif /* !USE_MINIINTERPRETER */