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.46 2005/06/27 18:00:12 grubba Exp $ + || $Id: sparc.c,v 1.47 2006/03/07 20:13:22 grubba Exp $   */      /*    * Machine code generator for sparc.    *    * Henrik Grubbström 20010720    */      #include "global.h"   #include "svalue.h"
pike.git/src/code/sparc.c:553:    /* stw %i2, [ %pike_sp, %offset(svalue, u.lval) ] */    PIKE_STPTR(SPARC_REG_I2, SPARC_REG_PIKE_SP,    sparc_pike_sp_bias + OFFSETOF(svalue, u.lval), 1);    sparc_pike_sp_bias += sizeof(struct svalue) * 2;    /* sth %i0, [ %pike_sp , -sizeof(struct svalue) ] */    SPARC_STH(SPARC_REG_I0, SPARC_REG_PIKE_SP,    sparc_pike_sp_bias - sizeof(struct svalue), 1);    sparc_codegen_state |= SPARC_CODEGEN_SP_NEEDS_STORE;   }    - void sparc_escape_catch(void) - { -  LOAD_PIKE_FP(); -  SPARC_FLUSH_UNSTORED(); - #ifdef PIKE_BYTECODE_SPARC64 -  /* The asr registers are implementation specific in Sparc V7 and V8. */ -  /* rd %pc, %i0 */ -  SPARC_RD(SPARC_REG_I0, SPARC_RD_REG_PC); -  /* add %i0, 20, %i0 */ -  SPARC_ADD(SPARC_REG_I0, SPARC_REG_I0, 5*4, 1); - #else /* !0 */ -  /* 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, return_addr) ] */ -  PIKE_STPTR(SPARC_REG_I0, SPARC_REG_PIKE_FP, -  OFFSETOF(pike_frame, return_addr), 1); - #ifdef PIKE_BYTECODE_SPARC64 -  /* 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); - #else /* ! 0 */ -  /* Sparc V7 & V8 code. */ -  /* or %g0, -2, %i0 */ -  SPARC_OR(SPARC_REG_I0, SPARC_REG_G0, -2, 1); -  /* ret */ -  SPARC_RET(); -  /* restore */ -  SPARC_RESTORE(SPARC_REG_G0, SPARC_REG_G0, SPARC_REG_G0, 0); - #endif /* 0 */ -  SPARC_UNLOAD_CACHED(); - } -  +    /*    *    */      #ifdef PIKE_DEBUG   void sparc_debug_check_registers(int state,    struct Pike_interpreter *cached_ip,    struct pike_frame *cached_fp,    struct svalue *cached_sp,    struct svalue **cached_mark_sp)
pike.git/src/code/sparc.c:767:       case F_CONST_1 - F_OFFSET:    sparc_push_int(-1, 0);    return;    case F_BIGNUM - F_OFFSET:    sparc_push_int(0x7fffffff, 0);    return;       case F_EXIT_CATCH - F_OFFSET:    sparc_push_int(0, 1); -  /* FALL_THROUGH */ -  case F_ESCAPE_CATCH - F_OFFSET: -  sparc_escape_catch(); -  return; +  addr = instrs[b = F_ESCAPE_CATCH-F_OFFSET].address; +  break;       case F_MAKE_ITERATOR - F_OFFSET:    {    SET_REG(SPARC_REG_O0, 1);    delay_ok = 1;    addr = (void *)f_get_iterator;    }    break;       case F_ADD - F_OFFSET: