pike.git
/
src
/
code
/
sparc.c
version
»
Context lines:
10
20
40
80
file
none
3
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);