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>
This commit is contained in:
parent
dffcf177dc
commit
eabf76a0d4
@ -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
|
* 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
|
* 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)
|
uint64 NMD::copy(uint64 d)
|
||||||
{
|
{
|
||||||
return d;
|
return d;
|
||||||
|
@ -105,13 +105,14 @@ private:
|
|||||||
|
|
||||||
uint64 renumber_registers(uint64 index, uint64 *register_list,
|
uint64 renumber_registers(uint64 index, uint64 *register_list,
|
||||||
size_t register_list_size);
|
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(uint64 d);
|
||||||
uint64 decode_gpr_gpr3_src_store(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_reg1(uint64 d);
|
||||||
uint64 decode_gpr_gpr2_reg2(uint64 d);
|
uint64 decode_gpr_gpr2_reg2(uint64 d);
|
||||||
|
uint64 decode_gpr_gpr1(uint64 d);
|
||||||
|
|
||||||
uint64 copy(uint64 d);
|
uint64 copy(uint64 d);
|
||||||
int64 copy(int64 d);
|
int64 copy(int64 d);
|
||||||
|
Loading…
Reference in New Issue
Block a user