Skip to content
Permalink
Browse files

fix the r4300 instruction format structs with bitfields in the debugg…

…er so that they will work on big-endian as well as little-endian machines
  • Loading branch information...
richard42 committed Nov 6, 2018
1 parent 3e510a5 commit 95f054cc35688e29a393a8de05d062fa26b28f80
Showing with 71 additions and 34 deletions.
  1. +71 −34 src/debugger/dbg_decoder_local.h
@@ -1253,40 +1253,77 @@ do { \
* Define the instruction formats.
*/


typedef union {
unsigned word;
struct {
unsigned imm: 16;
unsigned rt: 5;
unsigned rs: 5;
unsigned op: 6;
} IType;

struct {
unsigned target: 26;
unsigned op: 6;
} JType;

struct {
unsigned func: 6;
unsigned shamt: 5;
unsigned rd: 5;
unsigned rt: 5;
unsigned rs: 5;
unsigned op: 6;
} RType;

struct {
unsigned func: 6;
unsigned fd: 5;
unsigned fs: 5;
unsigned ft: 5;
unsigned fmt: 4;
unsigned : 1; /* always '1' */
unsigned op: 6; /* always '0x11' */
} FRType;
} InstFmt;
#if defined(M64P_BIG_ENDIAN)
/* Big Endian */
typedef union {
unsigned word;
struct {
unsigned op: 6;
unsigned rs: 5;
unsigned rt: 5;
unsigned imm: 16;
} IType;

struct {
unsigned op: 6;
unsigned target: 26;
} JType;

struct {
unsigned op: 6;
unsigned rs: 5;
unsigned rt: 5;
unsigned rd: 5;
unsigned shamt: 5;
unsigned func: 6;
} RType;

struct {
unsigned op: 6; /* always '0x11' */
unsigned : 1; /* always '1' */
unsigned fmt: 4;
unsigned ft: 5;
unsigned fs: 5;
unsigned fd: 5;
unsigned func: 6;
} FRType;
} InstFmt;
#else
/* Little Endian */
typedef union {
unsigned word;
struct {
unsigned imm: 16;
unsigned rt: 5;
unsigned rs: 5;
unsigned op: 6;
} IType;

struct {
unsigned target: 26;
unsigned op: 6;
} JType;

struct {
unsigned func: 6;
unsigned shamt: 5;
unsigned rd: 5;
unsigned rt: 5;
unsigned rs: 5;
unsigned op: 6;
} RType;

struct {
unsigned func: 6;
unsigned fd: 5;
unsigned fs: 5;
unsigned ft: 5;
unsigned fmt: 4;
unsigned : 1; /* always '1' */
unsigned op: 6; /* always '0x11' */
} FRType;
} InstFmt;
#endif

/*
* Values for the 'op' field.

0 comments on commit 95f054c

Please sign in to comment.
You can’t perform that action at this time.