disas: nanoMIPS: Reorder declarations and definitions of gpr decoders

Reorder declarations and definitions of gpr decoders by number of
input bits of corresponding encoding type.

Reviewed-by: Aleksandar Rikalo <arikalo@wavecomp.com>
Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
stable-4.0
Aleksandar Markovic 2018-12-26 18:46:28 +01:00
parent dffcf177dc
commit eabf76a0d4
2 changed files with 104 additions and 103 deletions

View File

@ -291,6 +291,77 @@ uint64 NMD::renumber_registers(uint64 index, uint64 *register_list,
}
/*
* NMD::decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
*
* Map a 4-bit code to the 5-bit register space according to this pattern:
*
* 1 0
* 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | ---------------
* | | | | | | | | | | --------------- |
* | | | | | | | | | --------------- | |
* | | | | | | | | --------------- | | |
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | |
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* 3 2 1 0
*
* Used in handling following instructions:
*
* - ADDU[4X4]
* - LW[4X4]
* - MOVEP[REV]
* - MUL[4X4]
* - SW[4X4]
*/
uint64 NMD::decode_gpr_gpr4(uint64 d)
{
static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
16, 17, 18, 19, 20, 21, 22, 23 };
return renumber_registers(d, register_list,
sizeof(register_list) / sizeof(register_list[0]));
}
/*
* NMD::decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
*
* Map a 4-bit code to the 5-bit register space according to this pattern:
*
* 1 0
* 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | ---------------------
* | | | | | | | | | | | --------------- |
* | | | | | | | | | | --------------- | |
* | | | | | | | | | --------------- | | |
* | | | | | | | | --------------- | | | |
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | |
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* 3 2 1 0
*
* This pattern is the same one used for 'gpr4' gpr encoding type, except for
* the input value 3, that is mapped to the output value 0 instead of 11.
*
* Used in handling following instructions:
*
* - MOVE.BALC
* - MOVEP
* - SW[4X4]
*/
uint64 NMD::decode_gpr_gpr4_zero(uint64 d)
{
static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
16, 17, 18, 19, 20, 21, 22, 23 };
return renumber_registers(d, register_list,
sizeof(register_list) / sizeof(register_list[0]));
}
/*
* NMD::decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
*
@ -389,106 +460,6 @@ uint64 NMD::decode_gpr_gpr3_src_store(uint64 d)
}
/*
* NMD::decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
*
* Map a 1-bit code to the 5-bit register space according to this pattern:
*
* 1 0
* | |
* | |
* | ---------------------
* --------------------- |
* | |
* | |
* | |
* | |
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* 3 2 1 0
*
* Used in handling following instruction:
*
* - MOVE.BALC
*/
uint64 NMD::decode_gpr_gpr1(uint64 d)
{
static uint64 register_list[] = { 4, 5 };
return renumber_registers(d, register_list,
sizeof(register_list) / sizeof(register_list[0]));
}
/*
* NMD::decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
*
* Map a 4-bit code to the 5-bit register space according to this pattern:
*
* 1 0
* 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | ---------------------
* | | | | | | | | | | | --------------- |
* | | | | | | | | | | --------------- | |
* | | | | | | | | | --------------- | | |
* | | | | | | | | --------------- | | | |
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | |
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* 3 2 1 0
*
* This pattern is the same one used for 'gpr4' gpr encoding type, except for
* the input value 3, that is mapped to the output value 0 instead of 11.
*
* Used in handling following instructions:
*
* - MOVE.BALC
* - MOVEP
* - SW[4X4]
*/
uint64 NMD::decode_gpr_gpr4_zero(uint64 d)
{
static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
16, 17, 18, 19, 20, 21, 22, 23 };
return renumber_registers(d, register_list,
sizeof(register_list) / sizeof(register_list[0]));
}
/*
* NMD::decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
*
* Map a 4-bit code to the 5-bit register space according to this pattern:
*
* 1 0
* 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | ---------------
* | | | | | | | | | | --------------- |
* | | | | | | | | | --------------- | |
* | | | | | | | | --------------- | | |
* | | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | |
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* 3 2 1 0
*
* Used in handling following instructions:
*
* - ADDU[4X4]
* - LW[4X4]
* - MOVEP[REV]
* - MUL[4X4]
* - SW[4X4]
*/
uint64 NMD::decode_gpr_gpr4(uint64 d)
{
static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
16, 17, 18, 19, 20, 21, 22, 23 };
return renumber_registers(d, register_list,
sizeof(register_list) / sizeof(register_list[0]));
}
/*
* NMD::decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
*
@ -549,6 +520,35 @@ uint64 NMD::decode_gpr_gpr2_reg2(uint64 d)
}
/*
* NMD::decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
*
* Map a 1-bit code to the 5-bit register space according to this pattern:
*
* 1 0
* | |
* | |
* | ---------------------
* --------------------- |
* | |
* | |
* | |
* | |
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
* 3 2 1 0
*
* Used in handling following instruction:
*
* - MOVE.BALC
*/
uint64 NMD::decode_gpr_gpr1(uint64 d)
{
static uint64 register_list[] = { 4, 5 };
return renumber_registers(d, register_list,
sizeof(register_list) / sizeof(register_list[0]));
}
uint64 NMD::copy(uint64 d)
{
return d;

View File

@ -105,13 +105,14 @@ private:
uint64 renumber_registers(uint64 index, uint64 *register_list,
size_t register_list_size);
uint64 decode_gpr_gpr4(uint64 d);
uint64 decode_gpr_gpr4_zero(uint64 d);
uint64 decode_gpr_gpr3(uint64 d);
uint64 decode_gpr_gpr3_src_store(uint64 d);
uint64 decode_gpr_gpr1(uint64 d);
uint64 decode_gpr_gpr4_zero(uint64 d);
uint64 decode_gpr_gpr4(uint64 d);
uint64 decode_gpr_gpr2_reg1(uint64 d);
uint64 decode_gpr_gpr2_reg2(uint64 d);
uint64 decode_gpr_gpr1(uint64 d);
uint64 copy(uint64 d);
int64 copy(int64 d);