pike.git / src / interpret.c

version» Context lines:

pike.git/src/interpret.c:1:   /*\   ||| This file a part of Pike, and is copyright by Fredrik Hubinette   ||| Pike is distributed as GPL (General Public License)   ||| See the files COPYING and DISCLAIMER for more information.   \*/   /**/   #include "global.h" - RCSID("$Id: interpret.c,v 1.233 2001/07/26 18:19:30 grubba Exp $"); + RCSID("$Id: interpret.c,v 1.234 2001/07/26 21:04:13 marcus Exp $");   #include "interpret.h"   #include "object.h"   #include "program.h"   #include "svalue.h"   #include "array.h"   #include "mapping.h"   #include "pike_error.h"   #include "language.h"   #include "stralloc.h"   #include "constants.h"
pike.git/src/interpret.c:843: Inside #if defined(__GNUC__) and #if defined(__i386__)
     #ifdef __i386__    /* This code does not clobber %eax, but    * the code jumped to does.    */    __asm__ __volatile__( " sub $8,%%esp\n"    " jmp *%0"    : "=m" (pc)    :    : "cc", "memory", "eax" ); - #else /* !__i386__ */ + #elif defined(__ppc__) || defined(_POWER) +  __asm__ __volatile__( " mtlr %0\n" +  " blr" +  : +  : "r" (pc) +  : "cc", "memory", "r0", "r3", "r4", "r5", +  "r6", "r7", "r8", "r9", "r10", "r11", "r12", +  "lr", "ctr"); + #else /* !__i386__ && !__ppc__ */    /* The test is needed to get the labels to work... */    if (pc) {    /* No extra setup needed!    */    return ((int (*)(void))pc)();    } - #endif /* __i386__ */ + #endif /* __i386__ || __ppc__ */    /* This code is never reached, but will    * prevent gcc from optimizing the labels below too much    */       fprintf(stderr,"We have reached the end of the world!\n");    goto *dummy_label;       /* %%esp will be slightly buggered after    * returning from the function code (8 bytes off), but that    * should not matter to these return statements. -Hubbe