Annotation of GNUtools/cctools/include/mach/m88k/thread_status.h, revision 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.