Cleaned up unwanted code and fixed BIT operations simulation.

This commit is contained in:
M R Swami Reddy 2008-05-05 09:29:10 +00:00
parent 8e26b0f4b5
commit 537e4bb9d6

View file

@ -14,8 +14,8 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License along You should have received a copy of the GNU General Public License
with this program. If not, see <http://www.gnu.org/licenses/>. */ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h" #include "config.h"
@ -40,100 +40,58 @@ extern char *strrchr ();
enum op_types { enum op_types {
OP_VOID, OP_VOID,
OP_CONSTANT3, OP_CONSTANT3,
OP_CONSTANT3_OUTPUT,
OP_UCONSTANT3, OP_UCONSTANT3,
OP_UCONSTANT3_OUTPUT,
OP_UCONSTANT3_1,
OP_UCONSTANT3_1_OUTPUT,
OP_CONSTANT4, OP_CONSTANT4,
OP_CONSTANT4_OUTPUT,
OP_CONSTANT4_1, OP_CONSTANT4_1,
OP_CONSTANT4_1_OUTPUT,
OP_CONSTANT5, OP_CONSTANT5,
OP_CONSTANT5_OUTPUT,
OP_CONSTANT6, OP_CONSTANT6,
OP_CONSTANT6_OUTPUT,
OP_CONSTANT16, OP_CONSTANT16,
OP_CONSTANT16_OUTPUT,
OP_UCONSTANT16, OP_UCONSTANT16,
OP_UCONSTANT16_OUTPUT,
OP_CONSTANT20, OP_CONSTANT20,
OP_CONSTANT20_OUTPUT,
OP_UCONSTANT20, OP_UCONSTANT20,
OP_UCONSTANT20_OUTPUT,
OP_CONSTANT32, OP_CONSTANT32,
OP_UCONSTANT32_OUTPUT,
OP_UCONSTANT32, OP_UCONSTANT32,
OP_CONSTANT32_OUTPUT,
OP_MEMREF, OP_MEMREF,
OP_MEMREF2, OP_MEMREF2,
OP_MEMREF3, OP_MEMREF3,
OP_DISP5, OP_DISP5,
OP_DISP5_OUTPUT,
OP_DISP17, OP_DISP17,
OP_DISP17_OUTPUT,
OP_DISP25, OP_DISP25,
OP_DISP25_OUTPUT,
OP_DISPE9, OP_DISPE9,
OP_DISPE9_OUTPUT,
//OP_ABS20, //OP_ABS20,
OP_ABS20_OUTPUT, OP_ABS20_OUTPUT,
//OP_ABS24, //OP_ABS24,
OP_ABS24_OUTPUT, OP_ABS24_OUTPUT,
OP_R_BASE_DISPS16, OP_R_BASE_DISPS16,
OP_R_BASE_DISPS16_OUTPUT,
OP_R_BASE_DISP20, OP_R_BASE_DISP20,
OP_R_BASE_DISP20_OUTPUT,
OP_R_BASE_DISPS20, OP_R_BASE_DISPS20,
OP_R_BASE_DISPS20_OUTPUT,
OP_R_BASE_DISPE20, OP_R_BASE_DISPE20,
OP_R_BASE_DISPE20_OUTPUT,
OP_RP_BASE_DISPE0, OP_RP_BASE_DISPE0,
OP_RP_BASE_DISPE0_OUTPUT,
OP_RP_BASE_DISP4, OP_RP_BASE_DISP4,
OP_RP_BASE_DISP4_OUTPUT,
OP_RP_BASE_DISPE4, OP_RP_BASE_DISPE4,
OP_RP_BASE_DISPE4_OUTPUT,
OP_RP_BASE_DISP14, OP_RP_BASE_DISP14,
OP_RP_BASE_DISP14_OUTPUT,
OP_RP_BASE_DISP16, OP_RP_BASE_DISP16,
OP_RP_BASE_DISP16_OUTPUT,
OP_RP_BASE_DISP20, OP_RP_BASE_DISP20,
OP_RP_BASE_DISP20_OUTPUT,
OP_RP_BASE_DISPS20, OP_RP_BASE_DISPS20,
OP_RP_BASE_DISPS20_OUTPUT,
OP_RP_BASE_DISPE20, OP_RP_BASE_DISPE20,
OP_RP_BASE_DISPE20_OUTPUT,
OP_R_INDEX7_ABS20, OP_R_INDEX7_ABS20,
OP_R_INDEX7_ABS20_OUTPUT,
OP_R_INDEX8_ABS20, OP_R_INDEX8_ABS20,
OP_R_INDEX8_ABS20_OUTPUT,
OP_RP_INDEX_DISP0, OP_RP_INDEX_DISP0,
OP_RP_INDEX_DISP0_OUTPUT,
OP_RP_INDEX_DISP14, OP_RP_INDEX_DISP14,
OP_RP_INDEX_DISP14_OUTPUT,
OP_RP_INDEX_DISP20, OP_RP_INDEX_DISP20,
OP_RP_INDEX_DISP20_OUTPUT,
OP_RP_INDEX_DISPS20, OP_RP_INDEX_DISPS20,
OP_RP_INDEX_DISPS20_OUTPUT,
OP_REG, OP_REG,
OP_REG_OUTPUT,
OP_REGP, OP_REGP,
OP_REGP_OUTPUT,
OP_PROC_REG, OP_PROC_REG,
OP_PROC_REG_OUTPUT,
OP_PROC_REGP, OP_PROC_REGP,
OP_PROC_REGP_OUTPUT,
OP_COND, OP_COND,
OP_COND_OUTPUT, OP_RA
OP_RA,
OP_RA_OUTPUT
}; };
@ -226,6 +184,7 @@ move_to_cr (int cr, creg_t mask, creg_t val, int psw_hw_p)
/* only issue an update if the register is being changed. */ /* only issue an update if the register is being changed. */
if ((State.cregs[cr] & ~mask) != val) if ((State.cregs[cr] & ~mask) != val)
SLOT_PEND_MASK (State.cregs[cr], mask, val); SLOT_PEND_MASK (State.cregs[cr], mask, val);
return val; return val;
} }
@ -358,16 +317,13 @@ trace_input_func (name, in1, in2, in3)
break; break;
case OP_REG: case OP_REG:
case OP_REG_OUTPUT:
case OP_REGP: case OP_REGP:
case OP_REGP_OUTPUT:
sprintf (p, "%sr%d", comma, OP[i]); sprintf (p, "%sr%d", comma, OP[i]);
p += strlen (p); p += strlen (p);
comma = ","; comma = ",";
break; break;
case OP_PROC_REG: case OP_PROC_REG:
case OP_PROC_REG_OUTPUT:
sprintf (p, "%scr%d", comma, OP[i]); sprintf (p, "%scr%d", comma, OP[i]);
p += strlen (p); p += strlen (p);
comma = ","; comma = ",";
@ -432,12 +388,6 @@ trace_input_func (name, in1, in2, in3)
(*cr16_callback->printf_filtered) (cr16_callback, "%*s", SIZE_VALUES, ""); (*cr16_callback->printf_filtered) (cr16_callback, "%*s", SIZE_VALUES, "");
break; break;
case OP_REG_OUTPUT:
case OP_REGP_OUTPUT:
case OP_PROC_REG_OUTPUT:
(*cr16_callback->printf_filtered) (cr16_callback, "%*s", SIZE_VALUES, "---");
break;
case OP_REG: case OP_REG:
(*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "", (*cr16_callback->printf_filtered) (cr16_callback, "%*s0x%.4x", SIZE_VALUES-6, "",
(uint16) GPR (OP[i])); (uint16) GPR (OP[i]));
@ -2444,11 +2394,10 @@ void
OP_6_8 () OP_6_8 ()
{ {
uint16 a = OP[0]; uint16 a = OP[0];
uint32 addr = (GPR (OP[1])), tmp; uint16 b = (GPR (OP[1]));
trace_input ("tbit", OP_CONSTANT4, OP_REG, OP_VOID); trace_input ("tbit", OP_CONSTANT4, OP_REG, OP_VOID);
tmp = RW (addr); SET_PSR_F (b & (1 << a));
SET_PSR_F (tmp & (1 << a)); trace_output_16 (b);
trace_output_32 (tmp);
} }
/* tbit. */ /* tbit. */
@ -2456,11 +2405,10 @@ void
OP_7_8 () OP_7_8 ()
{ {
uint16 a = GPR (OP[0]); uint16 a = GPR (OP[0]);
uint32 addr = (GPR (OP[1])), tmp; uint16 b = (GPR (OP[1]));
trace_input ("tbit", OP_REG, OP_REG, OP_VOID); trace_input ("tbit", OP_REG, OP_REG, OP_VOID);
tmp = RW (addr); SET_PSR_F (b & (1 << a));
SET_PSR_F (tmp & (1 << a)); trace_output_16 (b);
trace_output_32 (tmp);
} }
@ -4368,8 +4316,8 @@ OP_B_8 ()
void void
OP_62_8 () OP_62_8 ()
{ {
int32 tmp, b = (GPR32 (OP[1])); int32 tmp;
int16 a = (GPR (OP[0])); int16 a = (GPR (OP[0])), b = (GPR (OP[1]));
trace_input ("mulsw", OP_REG, OP_REGP, OP_VOID); trace_input ("mulsw", OP_REG, OP_REGP, OP_VOID);
tmp = a * b; tmp = a * b;
SET_GPR32 (OP[1], tmp); SET_GPR32 (OP[1], tmp);
@ -4380,8 +4328,8 @@ OP_62_8 ()
void void
OP_63_8 () OP_63_8 ()
{ {
uint32 tmp, b = (GPR32 (OP[1])); uint32 tmp;
uint16 a = (GPR (OP[0])); uint16 a = (GPR (OP[0])), b = (GPR (OP[1]));
trace_input ("muluw", OP_REG, OP_REGP, OP_VOID); trace_input ("muluw", OP_REG, OP_REGP, OP_VOID);
tmp = a * b; tmp = a * b;
SET_GPR32 (OP[1], tmp); SET_GPR32 (OP[1], tmp);