#ifndef _MACH_PPC_THREAD_STATUS_H_
#define _MACH_PPC_THREAD_STATUS_H_
#include <sys/appleapiopts.h>
#ifdef MACH_KERNEL_PRIVATE
#include <ppc/savearea.h>
#endif
#define PPC_THREAD_STATE 1
#define PPC_FLOAT_STATE 2
#define PPC_EXCEPTION_STATE 3
#define PPC_VECTOR_STATE 4
#define PPC_THREAD_STATE64 5
#define PPC_EXCEPTION_STATE64 6
#define THREAD_STATE_NONE 7
#define VALID_THREAD_STATE_FLAVOR(x) \
((x == PPC_THREAD_STATE) || \
(x == PPC_FLOAT_STATE) || \
(x == PPC_EXCEPTION_STATE) || \
(x == PPC_VECTOR_STATE) || \
(x == PPC_THREAD_STATE64) || \
(x == PPC_EXCEPTION_STATE64) || \
(x == THREAD_STATE_NONE))
typedef struct ppc_thread_state {
unsigned int srr0;
unsigned int srr1;
unsigned int r0;
unsigned int r1;
unsigned int r2;
unsigned int r3;
unsigned int r4;
unsigned int r5;
unsigned int r6;
unsigned int r7;
unsigned int r8;
unsigned int r9;
unsigned int r10;
unsigned int r11;
unsigned int r12;
unsigned int r13;
unsigned int r14;
unsigned int r15;
unsigned int r16;
unsigned int r17;
unsigned int r18;
unsigned int r19;
unsigned int r20;
unsigned int r21;
unsigned int r22;
unsigned int r23;
unsigned int r24;
unsigned int r25;
unsigned int r26;
unsigned int r27;
unsigned int r28;
unsigned int r29;
unsigned int r30;
unsigned int r31;
unsigned int cr;
unsigned int xer;
unsigned int lr;
unsigned int ctr;
unsigned int mq;
unsigned int vrsave;
} ppc_thread_state_t;
#pragma pack(4)
typedef struct ppc_thread_state64 {
unsigned long long srr0;
unsigned long long srr1;
unsigned long long r0;
unsigned long long r1;
unsigned long long r2;
unsigned long long r3;
unsigned long long r4;
unsigned long long r5;
unsigned long long r6;
unsigned long long r7;
unsigned long long r8;
unsigned long long r9;
unsigned long long r10;
unsigned long long r11;
unsigned long long r12;
unsigned long long r13;
unsigned long long r14;
unsigned long long r15;
unsigned long long r16;
unsigned long long r17;
unsigned long long r18;
unsigned long long r19;
unsigned long long r20;
unsigned long long r21;
unsigned long long r22;
unsigned long long r23;
unsigned long long r24;
unsigned long long r25;
unsigned long long r26;
unsigned long long r27;
unsigned long long r28;
unsigned long long r29;
unsigned long long r30;
unsigned long long r31;
unsigned int cr;
unsigned long long xer;
unsigned long long lr;
unsigned long long ctr;
unsigned int vrsave;
} ppc_thread_state64_t;
#pragma pack()
typedef struct ppc_float_state {
double fpregs[32];
unsigned int fpscr_pad;
unsigned int fpscr;
} ppc_float_state_t;
typedef struct ppc_vector_state {
unsigned long save_vr[32][4];
unsigned long save_vscr[4];
unsigned int save_pad5[4];
unsigned int save_vrvalid;
unsigned int save_pad6[7];
} ppc_vector_state_t;
#if defined(__APPLE_API_PRIVATE) && defined(MACH_KERNEL_PRIVATE)
typedef struct savearea ppc_saved_state_t;
#else
typedef struct ppc_thread_state ppc_saved_state_t;
#endif
typedef struct ppc_exception_state {
unsigned long dar;
unsigned long dsisr;
unsigned long exception;
unsigned long pad0;
unsigned long pad1[4];
} ppc_exception_state_t;
#pragma pack(4)
typedef struct ppc_exception_state64 {
unsigned long long dar;
unsigned long dsisr;
unsigned long exception;
unsigned long pad1[4];
} ppc_exception_state64_t;
#pragma pack()
#define PPC_THREAD_STATE_COUNT \
(sizeof(struct ppc_thread_state) / sizeof(int))
#define PPC_THREAD_STATE64_COUNT \
(sizeof(struct ppc_thread_state64) / sizeof(int))
#define PPC_EXCEPTION_STATE_COUNT \
(sizeof(struct ppc_exception_state) / sizeof(int))
#define PPC_EXCEPTION_STATE64_COUNT \
(sizeof(struct ppc_exception_state64) / sizeof(int))
#define PPC_FLOAT_STATE_COUNT \
(sizeof(struct ppc_float_state) / sizeof(int))
#define PPC_VECTOR_STATE_COUNT \
(sizeof(struct ppc_vector_state) / sizeof(int))
#define MACHINE_THREAD_STATE PPC_THREAD_STATE
#define MACHINE_THREAD_STATE_COUNT PPC_THREAD_STATE_COUNT
#define THREAD_MACHINE_STATE_MAX THREAD_STATE_MAX
#endif