⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hppa.h

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 H
📖 第 1 页 / 共 2 页
字号:
                                                          "i"  (sr),  \                                                          "r"  (grb))/* Purge Instruction Tlb                PITLB  x(s,b) */#define HPPA_ASM_PITLB(grx,sr,grb)      asm volatile ("pitlb %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Purge Data Tlb Entry                 PDTLBE  x(s,b) */#define HPPA_ASM_PDTLBE(grx,sr,grb)     asm volatile ("pdtlbe %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Purge Instruction Tlb Entry          PITLBE  x(s,b) */#define HPPA_ASM_PITLBE(grx,sr,grb)     asm volatile ("pitlbe %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Insert Data TLB Address              IDTLBA r,(s,b) */#define HPPA_ASM_IDTLBA(gr,sr,grb)      asm volatile ("idtlba %0,(%1,%2)" \                                                      : : "r"  (gr),  \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Insert Instruction TLB Address       IITLBA r,(s,b) */#define HPPA_ASM_IITLBA(gr,sr,grb)      asm volatile ("iitlba %0,(%1,%2)" \                                                      : : "r"  (gr),  \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Insert Data TLB Protection           IDTLBP r,(s,b) */#define HPPA_ASM_IDTLBP(gr,sr,grb)      asm volatile ("idtlbp %0,(%1,%2)" \                                                      : : "r"  (gr),  \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Insert Instruction TLB Protection    IITLBP r,(s,b) */#define HPPA_ASM_IITLBP(gr,sr,grb)      asm volatile ("iitlbp %0,(%1,%2)" \                                                      : : "r"  (gr),  \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Purge Data Cache                     PDC x(s,b) */#define HPPA_ASM_PDC(grx,sr,grb)        asm volatile ("pdc %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Flush Data Cache                     FDC x(s,b) */#define HPPA_ASM_FDC(grx,sr,grb)        asm volatile ("fdc %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Flush Instruction Cache              FDC x(s,b) */#define HPPA_ASM_FIC(grx,sr,grb)        asm volatile ("fic %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Flush Data Cache Entry               FDCE x(s,b) */#define HPPA_ASM_FDCE(grx,sr,grb)       asm volatile ("fdce %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Flush Instruction Cache Entry        FICE x(s,b) */#define HPPA_ASM_FICE(grx,sr,grb)       asm volatile ("fice %0(%1,%2)" \                                                      : : "r"  (grx), \                                                          "i"  (sr),  \                                                          "r"  (grb))/* Break                                BREAK i5,i13 */#define HPPA_ASM_BREAK(i5,i13)          asm volatile ("break %0,%1" \                                                      : : "i" (i5), \                                                          "i" (i13))/* Load and Clear Word Short            LDCWS d(s,b),t */#define HPPA_ASM_LDCWS(i,sr,grb,grt)    asm volatile ("ldcws %1(%2,%3),%0" \                                                      : "=r" (grt) \                                                      : "i"  (i),  \                                                        "i"  (sr), \                                                        "r"  (grb))/* Load and Clear Word Indexed          LDCWX x(s,b),t */#define HPPA_ASM_LDCWX(grx,sr,grb,grt)  asm volatile ("ldcwx %1(%2,%3),%0" \                                                      : "=r" (grt)  \                                                      : "r"  (grx), \                                                        "i"  (sr),  \                                                        "r"  (grb))/* Load Word Absolute Short             LDWAS d(b),t *//* NOTE: "short" here means "short displacement"     */#define HPPA_ASM_LDWAS(disp,grbase,gr)  asm volatile("ldwas %1(%2),%0" \                                                     : "=r" (gr)    \                                                     : "i"  (disp), \                                                       "r"  (grbase))/* Store Word Absolute Short            STWAS r,d(b) *//* NOTE: "short" here means "short displacement"     */#define HPPA_ASM_STWAS(gr,disp,grbase)  asm volatile("stwas %0,%1(%2)" \                                                     : : "r" (gr),   \                                                         "i" (disp), \                                                         "r" (grbase))/* * Swap bytes * REFERENCE:  PA72000 TRM -- Appendix C */#define HPPA_ASM_SWAPBYTES(value, swapped)  asm volatile( \    " shd    %1,%1,16,%0  \n\      dep    %0,15,8,%0   \n\      shd    %1,%0,8,%0"    \    : "=r" (swapped)        \    : "r" (value)           \  )/* 72000 Diagnose instructions follow * These macros assume gas knows about these instructions. * gas2.2.u1 did not. * I added them to my copy and installed it locally. * * There are *very* special requirements for these guys *   ref: TRM 6.1.3 Programming Constraints * * The macros below handle the following rules * *   Except for WIT, WDT, WDD, WIDO, WIDE, all DIAGNOSE must be doubled. *   Must never be nullified (hence the leading nop) *   NOP must preced every RDD,RDT,WDD,WDT,RDTLB *   Instruction preceeding GR_SHDW must not set any of the GR's saved * * The macros do *NOT* deal with the following problems *   doubled DIAGNOSE instructions must not straddle a page boundary *       if code translation enabled.  (since 2nd could trap on ITLB) *   If you care about DHIT and DPE bits of DR0, then *       No store instruction in the 2 insn window before RDD *//* Move To CPU/DIAG register            MTCPU r,t */#define HPPA_ASM_MTCPU(gr,dr)           asm volatile (" nop \n"          \                                                      " mtcpu %1,%0 \n"  \                                                      " mtcpu %1,%0"     \                                                      : : "i" (dr), \                                                          "r" (gr))/* Move From CPU/DIAG register          MFCPU r,t */#define HPPA_ASM_MFCPU(dr,gr)           asm volatile (" nop \n"          \                                                      " mfcpu %1,%0\n"   \                                                      " mfcpu %1,%0"     \                                                      : "=r" (gr) \                                                      : "i" (dr))/* Transfer of Control Enable           TOC_EN */#define HPPA_ASM_TOC_EN()               asm volatile (" tocen \n" \                                                      " tocen")/* Transfer of Control Disable          TOC_DIS */#define HPPA_ASM_TOC_DIS()              asm volatile (" tocdis \n" \                                                      " tocdis")/* Shadow Registers to General Register SHDW_GR */#define HPPA_ASM_SHDW_GR()              asm volatile (" shdwgr \n" \                                                      " shdwgr"    \                                                ::: "r1" "r8" "r9" "r16" \                                                    "r17" "r24" "r25")/* General Registers to Shadow Register GR_SHDW */#define HPPA_ASM_GR_SHDW()              asm volatile (" nop \n" \                                                      " grshdw \n" \                                                      " grshdw")/* * Definitions of special registers for use by the above macros. *//* Hardware Space Registers */#define HPPA_SR0     0#define HPPA_SR1     1#define HPPA_SR2     2#define HPPA_SR3     3#define HPPA_SR4     4#define HPPA_SR5     5#define HPPA_SR6     6#define HPPA_SR7     7/* Hardware Control Registers */#define HPPA_CR0     0#define HPPA_RCTR    0               /* Recovery Counter Register */#define HPPA_CR8     8               /* Protection ID 1 */#define HPPA_PIDR1   8#define HPPA_CR9     9               /* Protection ID 2 */#define HPPA_PIDR2   9#define HPPA_CR10    10#define HPPA_CCR     10              /* Coprocessor Confiquration Register */#define HPPA_CR11    11#define HPPA_SAR     11              /* Shift Amount Register */#define HPPA_CR12    12#define HPPA_PIDR3   12              /* Protection ID 3 */#define HPPA_CR13    13#define HPPA_PIDR4   13              /* Protection ID 4 */#define HPPA_CR14    14#define HPPA_IVA     14              /* Interrupt Vector Address */#define HPPA_CR15    15#define HPPA_EIEM    15              /* External Interrupt Enable Mask */#define HPPA_CR16    16#define HPPA_ITMR    16              /* Interval Timer */#define HPPA_CR17    17#define HPPA_PCSQ    17              /* Program Counter Space queue */#define HPPA_CR18    18#define HPPA_PCOQ    18              /* Program Counter Offset queue */#define HPPA_CR19    19#define HPPA_IIR     19              /* Interruption Instruction Register */#define HPPA_CR20    20#define HPPA_ISR     20              /* Interruption Space Register */#define HPPA_CR21    21#define HPPA_IOR     21              /* Interruption Offset Register */#define HPPA_CR22    22#define HPPA_IPSW    22              /* Interrpution Processor Status Word */#define HPPA_CR23    23#define HPPA_EIRR    23              /* External Interrupt Request */#define HPPA_CR24    24#define HPPA_PPDA    24              /* Physcial Page Directory Address */#define HPPA_TR0     24              /* Temporary register 0 */#define HPPA_CR25    25#define HPPA_HTA     25              /* Hash Table Address */#define HPPA_TR1     25              /* Temporary register 1 */#define HPPA_CR26    26#define HPPA_TR2     26              /* Temporary register 2 */#define HPPA_CR27    27#define HPPA_TR3     27              /* Temporary register 3 */#define HPPA_CR28    28#define HPPA_TR4     28              /* Temporary register 4 */#define HPPA_CR29    29#define HPPA_TR5     29              /* Temporary register 5 */#define HPPA_CR30    30#define HPPA_TR6     30              /* Temporary register 6 */#define HPPA_CR31    31#define HPPA_CPUID   31              /* MP identifier *//* * Diagnose registers */#define HPPA_DR0      0#define HPPA_DR1      1#define HPPA_DR8      8#define HPPA_DR24    24#define HPPA_DR25    25/* * Tear apart a break instruction to find its type. */#define HPPA_BREAK5(x)          ((x) & 0x1F)#define HPPA_BREAK13(x)         (((x) >> 13) & 0x1FFF)/* assemble a break instruction */#define HPPA_BREAK(i5,i13)      (((i5) & 0x1F) | (((i13) & 0x1FFF) << 13))/* * this won't work in ASM or non-GNU compilers */#if !defined(ASM) && defined(__GNUC__)/* * static inline utility functions to get at control registers */#define EMIT_GET_CONTROL(name, reg)            \static __inline__ unsigned int                 \get_ ## name (void)                            \{                                              \    unsigned int value;                        \    HPPA_ASM_MFCTL(reg, value);                \    return value;                              \}#define EMIT_SET_CONTROL(name, reg)            \static __inline__ void                         \set_ ## name (unsigned int new_value)          \{                                              \    HPPA_ASM_MTCTL(new_value, reg);            \}#define EMIT_CONTROLS(name, reg)               \    EMIT_GET_CONTROL(name, reg)                \    EMIT_SET_CONTROL(name, reg)EMIT_CONTROLS(recovery, HPPA_RCTR);          /* CR0  */EMIT_CONTROLS(pid1, HPPA_PIDR1);             /* CR8  */EMIT_CONTROLS(pid2, HPPA_PIDR2);             /* CR9  */EMIT_CONTROLS(ccr, HPPA_CCR);                /* CR10; CCR and SCR share CR10 */EMIT_CONTROLS(scr, HPPA_CCR);                /* CR10; CCR and SCR share CR10 */EMIT_CONTROLS(sar, HPPA_SAR);                /* CR11 */EMIT_CONTROLS(pid3, HPPA_PIDR3);             /* CR12 */EMIT_CONTROLS(pid4, HPPA_PIDR4);             /* CR13 */EMIT_CONTROLS(iva, HPPA_IVA);                /* CR14 */EMIT_CONTROLS(eiem, HPPA_EIEM);              /* CR15 */EMIT_CONTROLS(itimer, HPPA_ITMR);            /* CR16 */EMIT_CONTROLS(pcsq, HPPA_PCSQ);              /* CR17 */EMIT_CONTROLS(pcoq, HPPA_PCOQ);              /* CR18 */EMIT_CONTROLS(iir, HPPA_IIR);                /* CR19 */EMIT_CONTROLS(isr, HPPA_ISR);                /* CR20 */EMIT_CONTROLS(ior, HPPA_IOR);                /* CR21 */EMIT_CONTROLS(ipsw, HPPA_IPSW);              /* CR22 */EMIT_CONTROLS(eirr, HPPA_EIRR);              /* CR23 */EMIT_CONTROLS(tr0, HPPA_TR0);                /* CR24 */EMIT_CONTROLS(tr1, HPPA_TR1);                /* CR25 */EMIT_CONTROLS(tr2, HPPA_TR2);                /* CR26 */EMIT_CONTROLS(tr3, HPPA_TR3);                /* CR27 */EMIT_CONTROLS(tr4, HPPA_TR4);                /* CR28 */EMIT_CONTROLS(tr5, HPPA_TR5);                /* CR29 */EMIT_CONTROLS(tr6, HPPA_TR6);                /* CR30 */EMIT_CONTROLS(tr7, HPPA_CR31);               /* CR31 */#endif /* ASM and GNU *//* * If and How to invoke the debugger (a ROM debugger generally) */#define CPU_INVOKE_DEBUGGER \    do { \        HPPA_ASM_BREAK(1,1); \    } while (0)#ifdef __cplusplus}#endif#endif /* ! _INCLUDE_HPPA_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -