From fb71b542de497b82af7ad5a7f6b615851ec4b6b7 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sat, 20 Jan 2007 13:33:42 +0000 Subject: [PATCH] start add mr op code causeome new bug for ppc svn path=/trunk/; revision=25543 --- rosapps/devutils/cputointel/From/PPC/PPC.h | 1 + .../devutils/cputointel/From/PPC/PPCBrain.c | 12 ++++++++- .../devutils/cputointel/From/PPC/PPCBrain.h | 1 + .../devutils/cputointel/From/PPC/PPCopcode.c | 25 +++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/rosapps/devutils/cputointel/From/PPC/PPC.h b/rosapps/devutils/cputointel/From/PPC/PPC.h index 845672b24e2..dd3a39cd34e 100644 --- a/rosapps/devutils/cputointel/From/PPC/PPC.h +++ b/rosapps/devutils/cputointel/From/PPC/PPC.h @@ -12,6 +12,7 @@ CPU_INT PPCBrain( CPU_BYTE *cpu_buffer, /* here we put the prototype for the opcode api that brain need we show a example for it */ CPU_INT PPC_Blr( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch); CPU_INT PPC_Li( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch); +CPU_INT PPC_mr( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch); CPU_INT PPC_Stw( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch); CPU_INT PPC_Stwu( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch); diff --git a/rosapps/devutils/cputointel/From/PPC/PPCBrain.c b/rosapps/devutils/cputointel/From/PPC/PPCBrain.c index f4a6a5829a9..9a5fd2c4508 100644 --- a/rosapps/devutils/cputointel/From/PPC/PPCBrain.c +++ b/rosapps/devutils/cputointel/From/PPC/PPCBrain.c @@ -80,6 +80,17 @@ CPU_INT PPCBrain( CPU_BYTE *cpu_buffer, cpu_pos += retsize; } + /* mr */ + if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_mr))) == ConvertBitToByte32(cpuPPCInit_mr)) + { + retsize = PPC_mr( outfp, cpu_buffer, cpu_pos, cpu_size, + BaseAddress, cpuarch); + if (retsize<0) + retcode = 1; + else + cpu_pos += retsize; + } + /* stw */ if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_stw))) == ConvertBitToByte32(cpuPPCInit_stw)) { @@ -90,7 +101,6 @@ CPU_INT PPCBrain( CPU_BYTE *cpu_buffer, else cpu_pos += retsize; } - retcode = 0; /* stwu */ if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_stwu))) == ConvertBitToByte32(cpuPPCInit_stwu)) diff --git a/rosapps/devutils/cputointel/From/PPC/PPCBrain.h b/rosapps/devutils/cputointel/From/PPC/PPCBrain.h index 0196ea35b11..5397f789499 100644 --- a/rosapps/devutils/cputointel/From/PPC/PPCBrain.h +++ b/rosapps/devutils/cputointel/From/PPC/PPCBrain.h @@ -14,6 +14,7 @@ CPU_BYTE cpuPPCInit_Blr[32] = {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 CPU_BYTE cpuPPCInit_Li[32] = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,1,1,1,0,2,2}; CPU_BYTE cpuPPCInit_stw[32] = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,0,0,1,0,0,2,2}; CPU_BYTE cpuPPCInit_stwu[32] = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,0,0,1,0,1,2,2}; +CPU_BYTE cpuPPCInit_mr[32] = {0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,2,2,2,2,2,2,2,2,0,1,1,1,1,1,2,2}; /* mask */ /* * no mask we implement function getting the reg right diff --git a/rosapps/devutils/cputointel/From/PPC/PPCopcode.c b/rosapps/devutils/cputointel/From/PPC/PPCopcode.c index fff7907896b..7d51b54a360 100644 --- a/rosapps/devutils/cputointel/From/PPC/PPCopcode.c +++ b/rosapps/devutils/cputointel/From/PPC/PPCopcode.c @@ -95,6 +95,31 @@ CPU_INT PPC_Li( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, } +CPU_INT PPC_mr( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, + CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch) +{ + CPU_UNINT opcode; + + opcode = GetData32Le(&cpu_buffer[cpu_pos]); + + BaseAddress +=cpu_pos; + + /* own translatons langues */ + if (AllocAny()!=0) /* alloc memory for pMyBrainAnalys */ + { + return -1; + } + pMyBrainAnalys->op = OP_ANY_mov; + pMyBrainAnalys->type= 2 + 8 + 16; /* 8 dst reg, 2 src reg */ + pMyBrainAnalys->src_size = 32; + pMyBrainAnalys->src = PPC_GetBitArraySrcReg(opcode); + pMyBrainAnalys->dst = PPC_GetBitArrayBto31xx(opcode); + pMyBrainAnalys->memAdr=BaseAddress; + + return 4; +} + + CPU_INT PPC_Stw( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch) {