pike.git / src / code / sparc.c

version» Context lines:

pike.git/src/code/sparc.c:1:   /*   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: sparc.c,v 1.30 2002/11/10 19:44:37 grubba Exp $ + || $Id: sparc.c,v 1.31 2002/11/11 12:34:17 grubba Exp $   */      /*    * Machine code generator for sparc.    *    * Henrik Grubbström 20010720    */      #include "global.h"   #include "svalue.h"
pike.git/src/code/sparc.c:286:    /* save %sp, -112, %sp */    add_to_program(0x81e02000|(SPARC_REG_SP<<25)|    (SPARC_REG_SP<<14)|((-112)&0x1fff));    FLUSH_CODE_GENERATOR_STATE();   }      /* Update Pike_fp->pc */   void sparc_update_pc(void)   {    LOAD_PIKE_FP(); + #if 0 +  /* The ASR registers are implementation specific in Sparc V7 and V8. */    /* rd %pc, %i0 */    SPARC_RD(SPARC_REG_I0, SPARC_RD_REG_PC);    /* stw %pc, [ %pike_fp + pc ] */    SPARC_STW(SPARC_REG_I0, SPARC_REG_PIKE_FP, OFFSETOF(pike_frame, pc), 1); -  + #else /* !0 */ +  /* call .+8 */ +  SPARC_CALL(8); +  /* The new %o7 is available in the delay slot. */ +  /* stw %o7, [ %pike_fp + pc ] */ +  SPARC_STW(SPARC_REG_O7, SPARC_REG_PIKE_FP, OFFSETOF(pike_frame, pc), 1); + #endif /* 0 */   }      /*    * Opcode implementations.    */      #define MAKE_TYPE_WORD(TYPE, SUB_TYPE) (((TYPE) << 16)|(SUB_TYPE))      static void sparc_incr_mark_sp(int delta)   {
pike.git/src/code/sparc.c:441:    SPARC_ADD(SPARC_REG_PIKE_SP, SPARC_REG_PIKE_SP, sizeof(struct svalue)*2, 1);    /* sth %i0, [ %pike_sp , -sizeof(struct svalue) ] */    SPARC_STH(SPARC_REG_I0, SPARC_REG_PIKE_SP, -sizeof(struct svalue), 1);    sparc_codegen_state |= SPARC_CODEGEN_SP_NEEDS_STORE;   }      void sparc_escape_catch(void)   {    LOAD_PIKE_FP();    SPARC_FLUSH_UNSTORED(); + #if 0 +  /* The asr registers are implementation specific in Sparc V7 and V8. */    /* rd %pc, %i0 */    SPARC_RD(SPARC_REG_I0, SPARC_RD_REG_PC); - #if 0 +     /* add %i0, 20, %i0 */ -  SPARC_ADD(SPARC_REG_I0, SPARC_REG_I0, 20, 1); +  SPARC_ADD(SPARC_REG_I0, SPARC_REG_I0, 5*4, 1);   #else /* !0 */ -  /* add %i0, 24, %i0 */ -  SPARC_ADD(SPARC_REG_I0, SPARC_REG_I0, 24, 1); +  /* call .+8 */ +  SPARC_CALL(8); +  /* The new %o7 is available in the delay slot. */ +  /* add %o7, 24, %i0 */ +  SPARC_ADD(SPARC_REG_I0, SPARC_REG_O7, 6*4, 1);   #endif /* 0 */    /* stw %i0, [ %pike_fp, %offset(pike_frame, pc) ] */    SPARC_STW(SPARC_REG_I0, SPARC_REG_PIKE_FP,    OFFSETOF(pike_frame, pc), 1);   #if 0    /* The following code is Sparc V9 only code. */    /* return %i7 + 8 */    SPARC_RETURN(SPARC_REG_I7, 8, 1);    /* or %g0, -2, %o0 */    SPARC_OR(SPARC_REG_O0, SPARC_REG_G0, -2, 1);