fix for gcc 4.1.x
[ghc-hetmet.git] / ghc / rts / StgCRun.c
index fc08b50..29d4efe 100644 (file)
@@ -203,7 +203,8 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
 
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
     __asm__ volatile (
        /*
@@ -223,7 +224,7 @@ static void StgRunIsImplementedInAssembler(void)
        /*
         * Set BaseReg
         */
-       "movq %%rsi,%%rbx\n\t"
+       "movq %%rsi,%%r13\n\t"
        /*
         * grab the function argument from the stack, and jump to it.
         */
@@ -233,7 +234,7 @@ static void StgRunIsImplementedInAssembler(void)
        ".global " STG_RETURN "\n"
                STG_RETURN ":\n\t"
 
-       "movq %%r13, %%rax\n\t"   /* Return value in R1  */
+       "movq %%rbx, %%rax\n\t"   /* Return value in R1  */
 
        /*
         * restore callee-saves registers.  (Don't stomp on %%rax!)
@@ -590,7 +591,8 @@ StgRun(StgFunPtr f, StgRegTable *basereg)
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
 #ifdef darwin_HOST_OS
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
 #if HAVE_SUBSECTIONS_VIA_SYMBOLS
             // if the toolchain supports deadstripping, we have to
@@ -628,7 +630,8 @@ static void StgRunIsImplementedInAssembler(void)
 // *) The Link Register is saved to a different offset in the caller's stack frame
 //    (Linux: 4(r1), Darwin 8(r1))
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
        __asm__ volatile (
                "\t.globl StgRun\n"
@@ -707,7 +710,8 @@ static void StgRunIsImplementedInAssembler(void)
 #ifdef linux_HOST_OS
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
         // r0 volatile
        // r1 stack pointer
@@ -857,7 +861,8 @@ static void StgRunIsImplementedInAssembler(void)
 #define LOCALS 31
 #endif
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
     __asm__ volatile(
                ".global StgRun\n"