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.
14
2002/11/05 19:
14
:
51
grubba Exp $
+
|| $Id: sparc.c,v 1.
15
2002/11/05 19:
29
:
38
grubba Exp $
*/ /* * Machine code generator for sparc. * * Henrik Grubbström 20010720 */ #include "operators.h"
pike.git/src/code/sparc.c:85:
INT32 val_ = X; \ INT32 reg_ = REG; \ if ((-4096 <= val_) && (val_ <= 4095)) { \ /* or %g0, val_, reg */ \ SPARC_OR(SPARC_REG_G0, reg_, val_, 1); \ } else { \ /* sethi %hi(val_), reg */ \ SPARC_SETHI(reg_, val_); \ if (val_ & 0x3ff) { \ /* or reg, %lo(val_), reg */ \
-
SPARC_OR(reg_, reg_, val_, 1);
\
+
SPARC_OR(reg_, reg_, val_
& 0x3ff
, 1); \
} \ if (val_ < 0) { \ /* Sign extend. */ \ /* sra reg, %g0, reg */ \ SPARC_SRA(reg_, reg_, SPARC_REG_G0, 0); \ } \ } \ } while(0) #define ADD_CALL(X, DELAY_OK) do { \
pike.git/src/code/sparc.c:127:
* * Note that the prologue size must be constant. */ void sparc_ins_entry(void) { /* save %sp, -112, %sp */ add_to_program(0x81e02000|(SPARC_REG_O6<<25)| (SPARC_REG_O6<<14)|((-112)&0x1fff)); }
+
/* Update Pike_fp->pc */
void sparc_update_pc(void) { /* call .+8 */ add_to_program(0x40000002); SET_REG(SPARC_REG_O3, ((INT32)(&Pike_interpreter.frame_pointer))); /* lduw [ %o3 ], %o3 */ add_to_program(0xc0000000|(SPARC_REG_O3<<25)|(SPARC_REG_O3<<14)); /* stw %o7, [ %o3 + pc ] */ add_to_program(0xc0202000|(SPARC_REG_O7<<25)|(SPARC_REG_O3<<14)| OFFSETOF(pike_frame, pc));