Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > a89df24b3c34782b2b9adf0ab690227f > files > 11

dyalog-1.11.3-1mdv2008.1.i586.rpm

/* $Id: archi.h 566 2006-11-06 17:20:50Z clerger $
 * Copyright (C) 1997, 2006 Eric de la Clergerie
 * ------------------------------------------------------------
 *
 *   Archi -- Architecture
 *
 * ------------------------------------------------------------
 * Description
 *   Register Architecture 
 * ------------------------------------------------------------
 */

#ifndef ARCHI_READ
#define ARCHI_READ

typedef void * TrailWord;

#if   defined(M_sparc_sunos) || defined(M_sparc_solaris)

register TrailWord                *reg_bank asm ("g6");

#define REG(i)         ((TrailWord)reg_bank[i])
#define LVALUE_REG(i)         (reg_bank[i])

#elif defined(M_ix86_linux) || defined(M_ix86_darwin)

#ifdef ARCHI_FILE
TrailWord                *reg_bank;
#else
extern   TrailWord       *reg_bank;
#endif

#define REG(i)         ((TrailWord)trail[i])
#define LVALUE_REG(i)         (trail[i])

#endif

#define NB_SYSTEM_REGISTERS 32
#define NB_USER_REGISTERS   1024
#define NB_REGISTERS        NB_SYSTEM_REGISTERS + NB_USER_REGISTERS

/*
 * System Register Indexes
 */

#define I_TOP        0	/* Next available save register */
#define I_LAYER      1	/* layer stack top register */
#define I_TRAIL      2	/* trail stack top register */
#define I_CTL        3  /* control stack top register */
#define I_TRANS      4	/* transition register */
#define I_TRANS_KEY  5	/* transition key register */
#define I_ITEM       6	/* item register */
#define I_ITEM_KEY   7	/* item key register */
#define I_ITEM_COMP  8	/* item component register */
#define I_MODULE     9	/* module register */
#define I_BACKPTR    10	/* backptr register (could use an user register) */
#define I_OBJECT     11	/* object register (could use an user register)  */
#define I_HEAP       12	/* heap top register */
#define I_HEAP_STOP  13	/* Stop address of the term being built */
#define I_LEVEL      14	/* Strate Level */

#define I_CP         15	/* Continuation Program pointer */
#define I_E          16	/* Environnement pointer */
#define I_B          17	/* Backtrack  pointer */
#define I_BC         18	/* Backtrack Cut pointer */
#define I_P          19	/* Program Pointer */

#define I_IP         20	/* Indexation Pointer */

#define I_COLLAPSE   21
#define I_BINDING    22
#define I_UNBIND     23
#define I_CGBINDING  24
#define I_DISPLAY    25	
#define I_DEREF_A    26
#define I_DEREF_K    27	

#define I_MIN_LAYER 28

/*
 * Saving to / restoring from  a save register
 */

#define R_SAVE(top,reg)       *top++    = ((TrailWord) reg)
#define R_RESTORE(top,reg)    reg   = *--top


#define R_TOP        (TrailWord *) REG(I_TOP)
#define LVALUE_R_TOP        LVALUE_REG(I_TOP)

extern void initialization_registers();

/*
 *  User Register
 */

#define X( i )         REG( NB_SYSTEM_REGISTERS + i )
#define LVALUE_X( i )         LVALUE_REG( NB_SYSTEM_REGISTERS + i )

#define REG_VALUE(v)     ((TrailWord) (v))


#endif /* ARCHI_READ */