root/sys/arch/sh3/include/sh_opcode.h
/* $NetBSD: sh_opcode.h,v 1.3 2002/04/28 17:10:36 uch Exp $ */

typedef union {
        unsigned word;

#if _BYTE_ORDER == BIG_ENDIAN
        struct {
                unsigned op: 16;
        } oType;

        struct {
                unsigned op1: 4;
                unsigned n: 4;
                unsigned op2: 8;
        } nType;

        struct {
                unsigned op1: 4;
                unsigned m: 4;
                unsigned op2: 8;
        } mType;

        struct {
                unsigned op1: 4;
                unsigned n: 4;
                unsigned m: 4;
                unsigned op2: 4;
        } nmType;

        struct {
                unsigned op: 8;
                unsigned m: 4;
                unsigned d: 4;
        } mdType;

        struct {
                unsigned op: 8;
                unsigned n: 4;
                unsigned d: 4;
        } nd4Type;

        struct {
                unsigned op: 4;
                unsigned n: 4;
                unsigned m: 4;
                unsigned d: 4;
        } nmdType;

        struct {
                unsigned op: 8;
                unsigned d: 8;
        } dType;

        struct {
                unsigned op: 4;
                unsigned d: 12;
        } d12Type;

        struct {
                unsigned op: 4;
                unsigned n: 4;
                unsigned d: 8;
        } nd8Type;

        struct {
                unsigned op: 8;
                unsigned i: 8;
        } iType;

        struct {
                unsigned op: 4;
                unsigned n: 4;
                unsigned i: 8;
        } niType;
#endif
#if _BYTE_ORDER == LITTLE_ENDIAN
struct {
                unsigned op: 16;
        } oType;

        struct {
                unsigned op2: 8;
                unsigned n: 4;
                unsigned op1: 4;
        } nType;

        struct {
                unsigned op2: 8;
                unsigned m: 4;
                unsigned op1: 4;
        } mType;

        struct {
                unsigned op2: 4;
                unsigned m: 4;
                unsigned n: 4;
                unsigned op1: 4;
        } nmType;

        struct {
                unsigned d: 4;
                unsigned m: 4;
                unsigned op: 8;
        } mdType;

        struct {
                unsigned d: 4;
                unsigned n: 4;
                unsigned op: 8;
        } nd4Type;

        struct {
                unsigned d: 4;
                unsigned m: 4;
                unsigned n: 4;
                unsigned op: 4;
        } nmdType;

        struct {
                unsigned d: 8;
                unsigned op: 8;
        } dType;

        struct {
                unsigned d: 12;
                unsigned op: 4;
        } d12Type;

        struct {
                unsigned d: 8;
                unsigned n: 4;
                unsigned op: 4;
        } nd8Type;

        struct {
                unsigned i: 8;
                unsigned op: 8;
        } iType;

        struct {
                unsigned i: 8;
                unsigned n: 4;
                unsigned op: 4;
        } niType;
#endif
} InstFmt;

#define OP_BF   0x8b
#define OP_BFS  0x8f
#define OP_BT   0x89
#define OP_BTS  0x8d
#define OP_BRA  0xa
#define OP_BSR  0xb
#define OP1_BRAF        0x0
#define OP2_BRAF        0x23
#define OP1_BSRF        0x0
#define OP2_BSRF        0x03
#define OP1_JMP 0x4
#define OP2_JMP 0x2b
#define OP1_JSR 0x4
#define OP2_JSR 0x0b
#define OP_RTS  0xffff