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...
Showing
with
71 additions
and
34 deletions.
-
+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