Annotation of GNUtools/cctools/include/mach/m88k/thread_status.h, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1991 NeXT Computer, Inc.  All rights reserved.
                      2:  *
                      3:  *     File:   mach/m88k/thread_status.h
                      4:  *     Author: Mike DeMoney, NeXT Computer, Inc.
                      5:  *
                      6:  *     This include file defines the per-thread state
                      7:  *     for NeXT 88K-based products.
                      8:  *
                      9:  * HISTORY
                     10:  * 23-Jan-91  Mike DeMoney ([email protected])
                     11:  *     Created.
                     12:  *
                     13:  * FIXME:
                     14:  *     All of these types should be pulled from architecture.
                     15:  *     Solve possible conflicting types problem for implementations
                     16:  *     by making user define an implementation (e.g. #define __M88110__)
                     17:  *     to get a implementation specific features.
                     18:  *
                     19:  *     Put fp envelope stuff in mach/m88k/m88110_fpee.h.
                     20:  */
                     21: 
                     22: #ifndef        _MACH_M88K_THREAD_STATE_
                     23: #define        _MACH_M88K_THREAD_STATE_
                     24: 
                     25: #import <architecture/m88k/fp_regs.h>
                     26: #import <architecture/m88k/reg_help.h>
                     27: 
                     28: /**************************************************************************
                     29:  * Data Typedefs used by thread_getstatus() and thread_setstatus()        *
                     30:  * NOTE: FP control and status regs described in <mach/m88k/fp_regs.h>    *
                     31:  **************************************************************************/
                     32: 
                     33: #define        M88K_THREAD_STATE_GRF           (1)     // general registers
                     34: #define M88K_THREAD_STATE_XRF          (2)     // extended and fp registers
                     35: #define        M88K_THREAD_STATE_USER          (3)     // non-architectural user state
                     36: #define M88110_THREAD_STATE_IMPL       (4)     // 88110 impl specific
                     37: 
                     38: #define        M88K_THREAD_STATE_MAXFLAVOR     (M88110_THREAD_STATE_IMPL)
                     39: 
                     40: /*
                     41:  * m88k_thread_state_grf -- basic thread state for NeXT 88K-based products
                     42:  */
                     43: typedef struct _m88k_thread_state_grf {
                     44:        unsigned        r1;             // rpc: return pc, caller-saved
                     45:        unsigned        r2;             // a0: argument 0, caller-saved
                     46:        unsigned        r3;             // a1
                     47:        unsigned        r4;             // a2
                     48:        unsigned        r5;             // a3
                     49:        unsigned        r6;             // a4
                     50:        unsigned        r7;             // a5
                     51:        unsigned        r8;             // a6
                     52:        unsigned        r9;             // a7
                     53:        unsigned        r10;            // t0: temporary, caller-saved
                     54:        unsigned        r11;            // t1
                     55:        unsigned        r12;            // t2: struct return ptr, 
                     56:        unsigned        r13;            // t3
                     57:        unsigned        r14;            // s0: saved, callee-saved
                     58:        unsigned        r15;            // s1
                     59:        unsigned        r16;            // s2
                     60:        unsigned        r17;            // s3
                     61:        unsigned        r18;            // s4
                     62:        unsigned        r19;            // s5
                     63:        unsigned        r20;            // s6
                     64:        unsigned        r21;            // s7
                     65:        unsigned        r22;            // s8
                     66:        unsigned        r23;            // s9
                     67:        unsigned        r24;            // s10
                     68:        unsigned        r25;            // s11
                     69:        unsigned        r26;            // t4
                     70:        unsigned        r27;            // at: temp, used by asm macros
                     71:        unsigned        r28;            // lk0: reserved for link editor
                     72:        unsigned        r29;            // lk1
                     73:        unsigned        r30;            // fp: frame ptr, callee-saved
                     74:        unsigned        r31;            // sp: stack ptr, callee-saved
                     75:        unsigned        xip;            // executing instruction pointer
                     76:        unsigned        xip_in_bd;      // non-zero => xip in branch delay slot
                     77:        /*
                     78:         * nip is only valid if xip_in_bd is TRUE
                     79:         */
                     80:        unsigned        nip;            // next instruction pointer
                     81: } m88k_thread_state_grf_t;
                     82: 
                     83: #define        M88K_THREAD_STATE_GRF_COUNT     \
                     84:        (sizeof(m88k_thread_state_grf_t)/sizeof(int))
                     85: 
                     86: /*
                     87:  * m88k_thread_state_xrf -- extended register file contents and floating point
                     88:  * control registers for NeXT 88K-based products.
                     89:  */
                     90: typedef struct _m88k_thread_state_xrf {
                     91:        m88k_xrf_t      x1;                     // caller-saved
                     92:        m88k_xrf_t      x2;
                     93:        m88k_xrf_t      x3;
                     94:        m88k_xrf_t      x4;
                     95:        m88k_xrf_t      x5;
                     96:        m88k_xrf_t      x6;
                     97:        m88k_xrf_t      x7;
                     98:        m88k_xrf_t      x8;
                     99:        m88k_xrf_t      x9;
                    100:        m88k_xrf_t      x10;
                    101:        m88k_xrf_t      x11;
                    102:        m88k_xrf_t      x12;
                    103:        m88k_xrf_t      x13;
                    104:        m88k_xrf_t      x14;
                    105:        m88k_xrf_t      x15;
                    106:        m88k_xrf_t      x16;
                    107:        m88k_xrf_t      x17;
                    108:        m88k_xrf_t      x18;
                    109:        m88k_xrf_t      x19;
                    110:        m88k_xrf_t      x20;
                    111:        m88k_xrf_t      x21;
                    112:        m88k_xrf_t      x22;                    // callee-saved
                    113:        m88k_xrf_t      x23;
                    114:        m88k_xrf_t      x24;
                    115:        m88k_xrf_t      x25;
                    116:        m88k_xrf_t      x26;
                    117:        m88k_xrf_t      x27;
                    118:        m88k_xrf_t      x28;
                    119:        m88k_xrf_t      x29;
                    120:        m88k_xrf_t      x30;                    // reserved
                    121:        m88k_xrf_t      x31;
                    122:        m88k_fpsr_t     fpsr;                   // fp status, fcr62
                    123:        m88k_fpcr_t     fpcr;                   // fp control, fcr63
                    124: } m88k_thread_state_xrf_t;
                    125: 
                    126: #define        M88K_THREAD_STATE_XRF_COUNT             \
                    127:        (sizeof(m88k_thread_state_xrf_t)/sizeof(int))
                    128: 
                    129: typedef struct _m88k_thread_state_user {
                    130:        int             user;                   // user register (for cthreads)
                    131: } m88k_thread_state_user_t;
                    132: 
                    133: #define M88K_THREAD_STATE_USER_COUNT           \
                    134:        (sizeof(m88k_thread_state_user_t)/sizeof(int))
                    135: 
                    136: /*
                    137:  * Motorola 88110 specific state
                    138:  * (Can't count on this being in all m88k implementations.)
                    139:  */
                    140: 
                    141: #define        M88110_N_DATA_BP        2               // 88110 supports 2 data bp's
                    142: 
                    143: /*
                    144:  * Data Breakpoint Address Match Mask -- actually indicates don't
                    145:  * care bits in addr
                    146:  */
                    147: typedef enum {
                    148:        M88110_MATCH_BYTE = 0,
                    149:        M88110_MATCH_SHORT = 0x1,
                    150:        M88110_MATCH_WORD = 0x3,
                    151:        M88110_MATCH_DOUBLE = 0x7,
                    152:        M88110_MATCH_QUAD = 0xf,
                    153:        M88110_MATCH_32 = 0x1f,
                    154:        M88110_MATCH_64 = 0x3f,
                    155:        M88110_MATCH_128 = 0x7f,
                    156:        M88110_MATCH_256 = 0xff,
                    157:        M88110_MATCH_512 = 0x1ff,
                    158:        M88110_MATCH_1024 = 0x3ff,
                    159:        M88110_MATCH_2048 = 0x7ff,
                    160:        M88110_MATCH_4096 = 0xfff
                    161: } m88110_match_t;
                    162: 
                    163: /*
                    164:  * Data Breakpoint Control Word
                    165:  */
                    166: typedef        struct {
                    167:        unsigned        :BITS_WIDTH(31,29);
                    168:        unsigned        rw:BIT_WIDTH(28);               // 1 => read access
                    169:        unsigned        rwm:BIT_WIDTH(27);              // 0 => rw is don't care
                    170:        unsigned        :BITS_WIDTH(26,13);
                    171:        m88110_match_t  addr_match:BITS_WIDTH(12,1);    // addr(12,1) don't cares
                    172:        unsigned        v:BIT_WIDTH(0);
                    173: } m88110_bp_ctrl_t;
                    174: 
                    175: /*
                    176:  * A complete Data Breakpoint spec
                    177:  */
                    178: typedef        struct {
                    179:        unsigned                addr;           // data address
                    180:        m88110_bp_ctrl_t        ctrl;
                    181: } m88110_data_bp_t;
                    182: 
                    183: /*
                    184:  * m88110_psr_t -- 88110 Processor Status Register
                    185:  * System prohibits modification of supr, le, se, sgn_imd, sm and mxm_dis
                    186:  * bits for user threads.
                    187:  */
                    188: typedef struct {
                    189:        unsigned        supr:BIT_WIDTH(31);
                    190:        unsigned        le:BIT_WIDTH(30);       // little endian mode
                    191:        unsigned        se:BIT_WIDTH(29);       // serial exec mode
                    192:        unsigned        c:BIT_WIDTH(28);        // carry
                    193:        unsigned        :BIT_WIDTH(27);
                    194:        unsigned        sgn_imd:BIT_WIDTH(26);  // signed immediates
                    195:        unsigned        sm:BIT_WIDTH(25);       // serialize mem refs
                    196:        unsigned        :BIT_WIDTH(24);
                    197:        unsigned        trace:BIT_WIDTH(23);
                    198:        unsigned        :BITS_WIDTH(22,5);
                    199:        unsigned        sfu2dis:BIT_WIDTH(4);   // gpu (sfu2) disable
                    200:        unsigned        sfu1dis:BIT_WIDTH(3);   // fpu (sfu1) disable
                    201:        unsigned        mxm_dis:BIT_WIDTH(2);   // misaligned dis
                    202:        unsigned        :BITS_WIDTH(1,0);
                    203: } m88110_psr_t;
                    204: 
                    205: /*
                    206:  * Information for IEEE floating point user trap handlers
                    207:  */
                    208: typedef enum {
                    209:        M88110_IRESULT_SIZE_NONE = 0,           // no intermediate result
                    210:        M88110_IRESULT_SIZE_SINGLE = 1,         // single precision result
                    211:        M88110_IRESULT_SIZE_DOUBLE = 2,         // double precision result
                    212:        M88110_IRESULT_SIZE_EXTENDED = 3,       // double extended result
                    213: } m88110_iresult_size_t;
                    214: 
                    215: typedef struct {
                    216:        unsigned        :BITS_WIDTH(31,16);             // unused
                    217:        m88110_iresult_size_t   iresult_size:BITS_WIDTH(15,14);
                    218:                                                        // size of iresult
                    219:        unsigned        :BITS_WIDTH(13,9);              // unused
                    220:        unsigned        sfu1_disabled:BIT_WIDTH(8);     // sfu disabled
                    221:        unsigned        int:BIT_WIDTH(7);               // invalid int conv
                    222:        unsigned        unimp:BIT_WIDTH(6);             // unimp ctrl reg
                    223:        unsigned        priv:BIT_WIDTH(5);              // priv violation
                    224:        unsigned        efinv:BIT_WIDTH(4);             // IEEE EFINV
                    225:        unsigned        efdvz:BIT_WIDTH(3);             // IEEE EFDVZ
                    226:        unsigned        efunf:BIT_WIDTH(2);             // IEEE EFUNF
                    227:        unsigned        efovf:BIT_WIDTH(1);             // IEEE EFOVF
                    228:        unsigned        efinx:BIT_WIDTH(0);             // IEEE EFINX
                    229: } m88110_fp_trap_status_t;
                    230: 
                    231: /*
                    232:  * m88110_thread_state_impl -- 88110 implementation-specific
                    233:  * control registers for NeXT 88K-based products.
                    234:  */
                    235: typedef struct _m88110_thread_state_impl {
                    236:        m88110_data_bp_t        data_bp[M88110_N_DATA_BP];
                    237: 
                    238:        /*
                    239:         * Certain of the 88110 psr bits may be modified
                    240:         */
                    241:        m88110_psr_t            psr;            // processor status
                    242:        /*
                    243:         * IEEE floating point user trap information.  Read only.
                    244:         * (Only valid immediately after an EXC_ARITHMETIC
                    245:         * exception with code EXC_M88K_SFU1_EXCP.  Trap
                    246:         * handlers must determine operation, source and
                    247:         * destination registers by fetching instruction at
                    248:         * exip.)
                    249:         */
                    250:        m88k_xrf_t              intermediate_result;
                    251:        m88110_fp_trap_status_t fp_trap_status;
                    252: } m88110_thread_state_impl_t;
                    253: 
                    254: #define        M88110_THREAD_STATE_IMPL_COUNT  \
                    255:        (sizeof(m88110_thread_state_impl_t)/sizeof(int))
                    256: 
                    257: #endif _MACH_M88K_THREAD_STATE_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.