mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 15:27:29 +00:00
powerpc: Use a datatype for instructions
Currently unsigned ints are used to represent instructions on powerpc. This has worked well as instructions have always been 4 byte words. However, ISA v3.1 introduces some changes to instructions that mean this scheme will no longer work as well. This change is Prefixed Instructions. A prefixed instruction is made up of a word prefix followed by a word suffix to make an 8 byte double word instruction. No matter the endianness of the system the prefix always comes first. Prefixed instructions are only planned for powerpc64. Introduce a ppc_inst type to represent both prefixed and word instructions on powerpc64 while keeping it possible to exclusively have word instructions on powerpc32. Signed-off-by: Jordan Niethe <jniethe5@gmail.com> [mpe: Fix compile error in emulate_spe()] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200506034050.24806-12-jniethe5@gmail.com
This commit is contained in:
parent
217862d9b9
commit
94afd069d9
26 changed files with 237 additions and 214 deletions
|
@ -462,7 +462,7 @@ struct compute_test {
|
|||
struct {
|
||||
char *descr;
|
||||
unsigned long flags;
|
||||
unsigned int instr;
|
||||
struct ppc_inst instr;
|
||||
struct pt_regs regs;
|
||||
} subtests[MAX_SUBTESTS + 1];
|
||||
};
|
||||
|
@ -843,7 +843,7 @@ static struct compute_test compute_tests[] = {
|
|||
};
|
||||
|
||||
static int __init emulate_compute_instr(struct pt_regs *regs,
|
||||
unsigned int instr)
|
||||
struct ppc_inst instr)
|
||||
{
|
||||
struct instruction_op op;
|
||||
|
||||
|
@ -861,7 +861,7 @@ static int __init emulate_compute_instr(struct pt_regs *regs,
|
|||
}
|
||||
|
||||
static int __init execute_compute_instr(struct pt_regs *regs,
|
||||
unsigned int instr)
|
||||
struct ppc_inst instr)
|
||||
{
|
||||
extern int exec_instr(struct pt_regs *regs);
|
||||
extern s32 patch__exec_instr;
|
||||
|
@ -892,7 +892,8 @@ static void __init run_tests_compute(void)
|
|||
unsigned long flags;
|
||||
struct compute_test *test;
|
||||
struct pt_regs *regs, exp, got;
|
||||
unsigned int i, j, k, instr;
|
||||
unsigned int i, j, k;
|
||||
struct ppc_inst instr;
|
||||
bool ignore_gpr, ignore_xer, ignore_ccr, passed;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(compute_tests); i++) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue