home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1991 NeXT Computer, Inc. All rights reserved.
- *
- * File: mach/m98k/thread_status.h
- * Author: Mike DeMoney, NeXT Computer, Inc.
- *
- * This include file defines the per-thread state
- * for NeXT 98K-based products.
- *
- * HISTORY
- * 5-Nov-92 Ben Fathi (benf@next.com)
- * Ported to m98k.
- *
- * 23-Jan-91 Mike DeMoney (mike@next.com)
- * Created.
- */
-
- #ifndef _MACH_M98K_THREAD_STATUS_
- #define _MACH_M98K_THREAD_STATUS_
-
- #import <architecture/nrw/reg_help.h>
- #import <architecture/m98k/basic_regs.h>
- #import <architecture/m98k/m98601_regs.h>
- #import <architecture/m98k/fp_regs.h>
-
- /**************************************************************************
- * Data Typedefs used by thread_getstatus() and thread_setstatus() *
- **************************************************************************/
-
- #define M98K_THREAD_STATE_GRF (1) // general registers
- #define M98K_THREAD_STATE_FPF (2) // fp registers
- #define M98K_THREAD_STATE_USER (3) // non-architectural user state
- #define M98601_THREAD_STATE_IMPL (4) // 98601 impl specific
-
- #define M98K_THREAD_STATE_MAXFLAVOR (M98601_THREAD_STATE_IMPL)
-
- /*
- * m98k_thread_state_grf -- basic thread state for NeXT 98K-based products
- */
- typedef struct _m98k_thread_state_grf {
- unsigned r0; // zt (not for mem ref): caller-saved
- unsigned r1; // sp (stack pointer): callee-saved
- unsigned r2; // toc (tbl of contents): callee saved
- unsigned r3; // a0 (arg 0, retval 0): caller saved
- unsigned r4; // a1
- unsigned r5; // a2
- unsigned r6; // a3
- unsigned r7; // a4
- unsigned r8; // a5
- unsigned r9; // a6
- unsigned r10; // a7
- unsigned r11; // ep (environment ptr): caller saved
- unsigned r12; // at (assembler temp): caller saved
- unsigned r13; // s17: callee saved
- unsigned r14; // s16
- unsigned r15; // s15
- unsigned r16; // s14
- unsigned r17; // s13
- unsigned r18; // s12
- unsigned r19; // s11
- unsigned r20; // s10
- unsigned r21; // s9
- unsigned r22; // s8
- unsigned r23; // s7
- unsigned r24; // s6
- unsigned r25; // s5
- unsigned r26; // s4
- unsigned r27; // s3
- unsigned r28; // s2
- unsigned r29; // s1
- unsigned r30; // s0
- unsigned r31; // fp (frame pointer): callee saved
- unsigned lr; // link register
- unsigned ctr; // count register
- cr_t cr; // condition register
- xer_t xer; // fixed point exception register
- msr_t msr; // machine state register
- unsigned cia; // current instruction address
- } m98k_thread_state_grf_t;
-
- #define M98K_THREAD_STATE_GRF_COUNT \
- (sizeof(m98k_thread_state_grf_t)/sizeof(int))
-
- /*
- * m98k_thread_state_fpf -- floating point register file contents and
- * floating point control registers for NeXT 98K-based products.
- */
- typedef struct _m98k_thread_state_fpf {
- m98k_fpf_t f0; // ft0 (scratch register): caller-saved
- m98k_fpf_t f1; // fa0 (fp arg 0): caller-saved
- m98k_fpf_t f2; // fa1
- m98k_fpf_t f3; // fa2
- m98k_fpf_t f4; // fa3
- m98k_fpf_t f5; // fa4
- m98k_fpf_t f6; // fa5
- m98k_fpf_t f7; // fa6
- m98k_fpf_t f8; // fa7
- m98k_fpf_t f9; // fa8
- m98k_fpf_t f10; // fa9
- m98k_fpf_t f11; // fa10
- m98k_fpf_t f12; // fa11
- m98k_fpf_t f13; // fa12
- m98k_fpf_t f14; // fs17: callee-saved
- m98k_fpf_t f15; // fs16
- m98k_fpf_t f16; // fs15
- m98k_fpf_t f17; // fs14
- m98k_fpf_t f18; // fs13
- m98k_fpf_t f19; // fs12
- m98k_fpf_t f20; // fs11
- m98k_fpf_t f21; // fs10
- m98k_fpf_t f22; // fs9
- m98k_fpf_t f23; // fs8
- m98k_fpf_t f24; // fs7
- m98k_fpf_t f25; // fs6
- m98k_fpf_t f26; // fs5
- m98k_fpf_t f27; // fs4
- m98k_fpf_t f28; // fs3
- m98k_fpf_t f29; // fs2
- m98k_fpf_t f30; // fs1
- m98k_fpf_t f31; // fs0
- m98k_fp_scr_t fpscr; // fp status and control register
- } m98k_thread_state_fpf_t;
-
- #define M98K_THREAD_STATE_FPF_COUNT \
- (sizeof(m98k_thread_state_fpf_t)/sizeof(int))
-
- typedef struct _m98k_thread_state_user {
- int user; // user register (for cthreads)
- } m98k_thread_state_user_t;
-
- #define M98K_THREAD_STATE_USER_COUNT \
- (sizeof(m98k_thread_state_user_t)/sizeof(int))
-
- /*
- * Motorola 98601 specific state
- * (Can't count on this being in all m98k implementations.)
- */
-
- /*
- * A complete Data Breakpoint spec
- */
- typedef struct {
- m98601_data_bp_addr_t addr;
- m98601_data_bp_mode_t mode;
- } m98601_data_bp_t;
-
- /*
- * m98601_thread_state_impl -- 98601 implementation-specific
- * control registers for NeXT 98K-based products.
- */
- typedef struct _m98601_thread_state_impl {
- /*
- * Certain of the 98601 msr bits may be modified
- */
- msr_t msr; // machine status
- unsigned mq; // multiply quotient register
- m98601_data_bp_t data_bp[M98601_N_DATA_BP];
- } m98601_thread_state_impl_t;
-
- #define M98601_THREAD_STATE_IMPL_COUNT \
- (sizeof(m98601_thread_state_impl_t)/sizeof(int))
-
- #endif _MACH_M98K_THREAD_STATUS_
-