regsSimsolaris.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* regsSimsolaris.h - simsolaris registers header */
  2. /* Copyright 1995 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01c,30dec97,dbt  added common names for registers
  7. 01b,27oct95,ism  cleanup
  8. 01a,12jun95,ism  written
  9. */
  10. #ifndef __INCregsSimsolarish
  11. #define __INCregsSimsolarish
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #ifndef _ASMLANGUAGE
  16. #define NGREG 19
  17. #define SPARC_MAXREGWINDOW  31      /* max windows in SPARC arch. */
  18. #define REG_PSR (0)
  19. #define REG_PC  (1)
  20. #define REG_nPC (2)
  21. #define REG_Y   (3)
  22. #define REG_G1  (4)
  23. #define REG_G2  (5)
  24. #define REG_G3  (6)
  25. #define REG_G4  (7)
  26. #define REG_G5  (8)
  27. #define REG_G6  (9)
  28. #define REG_G7  (10)
  29. #define REG_O0  (11)
  30. #define REG_O1  (12)
  31. #define REG_O2  (13)
  32. #define REG_O3  (14)
  33. #define REG_O4  (15)
  34. #define REG_O5  (16)
  35. #define REG_O6  (17)
  36. #define REG_O7  (18)
  37. typedef struct solaris_ucontext  /* solaris-required context structure    */
  38.     {
  39.     unsigned long             uc_flags;
  40.     struct solaris_ucontext   *uc_link;
  41.     unsigned long             uc_sigmask[4];
  42.     struct
  43.         {
  44.         char        *ss_sp;
  45.         int         ss_size;
  46.         int         ss_flags;
  47.         } uc_stack;
  48.     struct
  49.         {
  50.         int         gregs[NGREG];
  51.         struct
  52.             {
  53.             int     wbcnt;
  54.             int     *spbuf[SPARC_MAXREGWINDOW];
  55.             struct
  56. {
  57.                 int rw_local[8];
  58.                 int rw_in[8];
  59.          } wbuf[SPARC_MAXREGWINDOW];
  60.             } *gwins; /* POSSIBLE pointer to register windows */
  61.         struct
  62.     {
  63.          union
  64. {                           /* FPU floating point regs */
  65.                 unsigned    fpu_regs[32];   /* 32 singles */
  66.                 double      fpu_dregs[16];  /* 16 doubles */
  67.                 } fpu_fr;
  68.          void           *fpu_q;          /* ptr to array of FQ entries */
  69.          unsigned        fpu_fsr;        /* FPU status register */
  70.          unsigned char   fpu_qcnt;       /* # of entries in saved FQ */
  71.          unsigned char   fpu_q_entrysize;/* # of bytes per FQ entry */
  72.          unsigned char   fpu_en;         /* flag signifying fpu in use */
  73.             } fpregs;
  74.         long        filler[21];
  75.         } uc_mcontext;
  76.     long                   uc_filler[23];
  77.     } solaris_ucontext_t;
  78. typedef struct /* sparcsim Register Set */
  79.     {
  80.     void *reg_pc; /* pc to retore */
  81.     void *reg_npc; /* next pc to restore */
  82.     int   reg_psr; /* psr to restore */
  83.     int   reg_wbcnt; /* number of outstanding windows (always 0!) */
  84.     int   reg_tbr; /* not used for sim */
  85.     int   reg_y;
  86.     int   reg_onstack; /* sigstack state to restore (instead of pCpContext) */
  87.     int   reg_mask[4]; /* signal mask to restore (instead of pAsrSet) */
  88.     int   reg_global[8];
  89.     int   reg_out[8];
  90.     int   reg_local[8];
  91.     int   reg_in[8];
  92.     union
  93. {
  94. int solaris_context[112]; /* Solaris 2.4 u_context=448 bytes */
  95. solaris_ucontext_t aris;
  96. } sol;
  97.     } REG_SET;
  98. /* some common names for registers */
  99. #undef pc
  100. #define pc reg_pc
  101. #define reg_sp reg_out[6]
  102. #define reg_fp reg_in[6]
  103. #undef spReg
  104. #define spReg reg_out[6]
  105. #define REG_SET_PC      0x00            /* Program Counter */
  106. #define REG_SET_NPC     0x04            /* Next Program Counter */
  107. #define REG_SET_PSR     0x08            /* Processor Status Register */
  108. #define REG_SET_WIM     0x0C            /* Window Invalid Mask */
  109. #define REG_SET_TBR     0x10            /* Trap Base Register */
  110. #define REG_SET_Y       0x14            /* Y Register */
  111. /*#define REG_SET_pCP     0x18           / * Coprocessor Pointer */
  112. /*#define REG_SET_pASR    0x1C           / * Pointer to ASRs (%asr1 - %asr31) */
  113. #define REG_SET_GLOBALS 0x2C            /* Global Registers (%R0  - %R7)  */
  114. #define REG_SET_OUTS    0x4C            /* Out Registers    (%R8  - %R15) */
  115. #define REG_SET_LOCALS  0x6C            /* Local Registers  (%R16 - %R23) */
  116. #define REG_SET_INS     0x8C            /* In Registers     (%R24 - %R31) */
  117. #define REG_SET_GLOBAL(n)   (REG_SET_GLOBALS + (4 * (n)))
  118. #define REG_SET_OUT(n)      (REG_SET_OUTS + (4 * (n)))
  119. #define REG_SET_LOCAL(n)    (REG_SET_LOCALS + (4 * (n)))
  120. #define REG_SET_IN(n)       (REG_SET_INS + (4 * (n)))
  121. #define pREG_COPROCESSOR(n) (4 * (n))
  122. #define pREG_ASR(n)       (4 * (n))
  123. #define PC_OFFSET REG_SET_PC /* referenced by pc() in usrLib */
  124. #endif  /* _ASMLANGUAGE */
  125. #ifdef __cplusplus
  126. }
  127. #endif
  128. #endif /* __INCregsSimsolarish */