Add MSB_FIRST ifdefs

This commit is contained in:
twinaphex 2015-07-30 03:01:40 +02:00
parent 4036107852
commit dd86f4df9a
1 changed files with 57 additions and 4 deletions

View File

@ -339,11 +339,18 @@ typedef struct {
/* op2 is reg shift by imm */ /* op2 is reg shift by imm */
typedef union { typedef union
{
ARMDPI_op2_reg_shift r2; ARMDPI_op2_reg_shift r2;
struct { struct
{
#ifdef MSB_FIRST
arminstr_t shift : 5;
arminstr_t _dummy_r2 : 7;
#else
arminstr_t _dummy_r2 : 7; arminstr_t _dummy_r2 : 7;
arminstr_t shift : 5; arminstr_t shift : 5;
#endif
} imm; } imm;
} ARMDPI_op2_reg_imm; } ARMDPI_op2_reg_imm;
@ -351,9 +358,15 @@ typedef union {
typedef union { typedef union {
ARMDPI_op2_reg_shift r2; ARMDPI_op2_reg_shift r2;
struct { struct {
#ifdef MSB_FIRST
arminstr_t rs : 4;
arminstr_t pad : 1; /* always 0, to differentiate from HXFER etc. */
arminstr_t _dummy_r2 : 7;
#else
arminstr_t _dummy_r2 : 7; arminstr_t _dummy_r2 : 7;
arminstr_t pad : 1; /* always 0, to differentiate from HXFER etc. */ arminstr_t pad : 1; /* always 0, to differentiate from HXFER etc. */
arminstr_t rs : 4; arminstr_t rs : 4;
#endif
} reg; } reg;
} ARMDPI_op2_reg_reg; } ARMDPI_op2_reg_reg;
@ -366,6 +379,16 @@ typedef union {
ARMDPI_op2_reg_reg op2_reg_reg; ARMDPI_op2_reg_reg op2_reg_reg;
struct { struct {
#ifdef MSB_FIRST
arminstr_t cond : 4;
arminstr_t tag : 2; /* 0 0 */
arminstr_t type : 1; /* type of op2, 0 = register, 1 = immediate */
arminstr_t opcode : 4; /* arithmetic/logic operation */
arminstr_t s : 1; /* S-bit controls PSR update */
arminstr_t rn : 4; /* first operand reg */
arminstr_t rd : 4; /* destination reg */
arminstr_t op2 : 12; /* raw operand 2 */
#else
arminstr_t op2 : 12; /* raw operand 2 */ arminstr_t op2 : 12; /* raw operand 2 */
arminstr_t rd : 4; /* destination reg */ arminstr_t rd : 4; /* destination reg */
arminstr_t rn : 4; /* first operand reg */ arminstr_t rn : 4; /* first operand reg */
@ -374,6 +397,7 @@ typedef union {
arminstr_t type : 1; /* type of op2, 0 = register, 1 = immediate */ arminstr_t type : 1; /* type of op2, 0 = register, 1 = immediate */
arminstr_t tag : 2; /* 0 0 */ arminstr_t tag : 2; /* 0 0 */
arminstr_t cond : 4; arminstr_t cond : 4;
#endif
} all; } all;
} ARMInstrDPI; } ARMInstrDPI;
@ -671,7 +695,21 @@ typedef struct {
/* Word/byte transfer */ /* Word/byte transfer */
typedef union { typedef union {
ARMDPI_op2_reg_imm op2_reg_imm; ARMDPI_op2_reg_imm op2_reg_imm;
struct { struct
{
#ifdef MSB_FIRST
arminstr_t cond : 4;
arminstr_t tag : 2; /* 0 1 */
arminstr_t type : 1; /* imm(0) / register(1) */
arminstr_t p : 1; /* post-index(0) / pre-index(1) */
arminstr_t u : 1; /* down(0) / up(1) */
arminstr_t b : 1;
arminstr_t wb : 1;
arminstr_t ls : 1;
arminstr_t rn : 4;
arminstr_t rd : 4;
arminstr_t op2_imm : 12;
#else
arminstr_t op2_imm : 12; arminstr_t op2_imm : 12;
arminstr_t rd : 4; arminstr_t rd : 4;
arminstr_t rn : 4; arminstr_t rn : 4;
@ -683,6 +721,7 @@ typedef union {
arminstr_t type : 1; /* imm(0) / register(1) */ arminstr_t type : 1; /* imm(0) / register(1) */
arminstr_t tag : 2; /* 0 1 */ arminstr_t tag : 2; /* 0 1 */
arminstr_t cond : 4; arminstr_t cond : 4;
#endif
} all; } all;
} ARMInstrWXfer; } ARMInstrWXfer;
@ -1070,7 +1109,20 @@ typedef struct {
/* Move register to PSR. */ /* Move register to PSR. */
typedef union { typedef union {
ARMDPI_op2_imm op2_imm; ARMDPI_op2_imm op2_imm;
struct { struct
{
#ifdef MSB_FIRST
arminstr_t cond : 4;
arminstr_t tag : 2; /* 0 */
arminstr_t type : 1;
arminstr_t tag2 : 2; /* 0x2 */
arminstr_t sel : 1;
arminstr_t tag3 : 2; /* 0x2 */
arminstr_t fld : 4;
arminstr_t tag4 : 4; /* 0xF */
arminstr_t pad : 8; /* 0 */
arminstr_t rm : 4;
#else
arminstr_t rm : 4; arminstr_t rm : 4;
arminstr_t pad : 8; /* 0 */ arminstr_t pad : 8; /* 0 */
arminstr_t tag4 : 4; /* 0xF */ arminstr_t tag4 : 4; /* 0xF */
@ -1081,6 +1133,7 @@ typedef union {
arminstr_t type : 1; arminstr_t type : 1;
arminstr_t tag : 2; /* 0 */ arminstr_t tag : 2; /* 0 */
arminstr_t cond : 4; arminstr_t cond : 4;
#endif
} all; } all;
} ARMInstrMSR; } ARMInstrMSR;