64 bit fix (Jocelyn Mayer)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@839 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
15aeac3805
commit
274da6b24b
8
exec.c
8
exec.c
@ -1221,7 +1221,7 @@ void tlb_flush(CPUState *env, int flush_global)
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void tlb_flush_entry(CPUTLBEntry *tlb_entry, uint32_t addr)
|
||||
static inline void tlb_flush_entry(CPUTLBEntry *tlb_entry, target_ulong addr)
|
||||
{
|
||||
if (addr == (tlb_entry->address &
|
||||
(TARGET_PAGE_MASK | TLB_INVALID_MASK)))
|
||||
@ -1789,7 +1789,7 @@ static void code_mem_writeb(target_phys_addr_t addr, uint32_t val)
|
||||
{
|
||||
unsigned long phys_addr;
|
||||
|
||||
phys_addr = addr - (long)phys_ram_base;
|
||||
phys_addr = addr - (unsigned long)phys_ram_base;
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
tb_invalidate_phys_page_fast(phys_addr, 1);
|
||||
#endif
|
||||
@ -1801,7 +1801,7 @@ static void code_mem_writew(target_phys_addr_t addr, uint32_t val)
|
||||
{
|
||||
unsigned long phys_addr;
|
||||
|
||||
phys_addr = addr - (long)phys_ram_base;
|
||||
phys_addr = addr - (unsigned long)phys_ram_base;
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
tb_invalidate_phys_page_fast(phys_addr, 2);
|
||||
#endif
|
||||
@ -1813,7 +1813,7 @@ static void code_mem_writel(target_phys_addr_t addr, uint32_t val)
|
||||
{
|
||||
unsigned long phys_addr;
|
||||
|
||||
phys_addr = addr - (long)phys_ram_base;
|
||||
phys_addr = addr - (unsigned long)phys_ram_base;
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
tb_invalidate_phys_page_fast(phys_addr, 4);
|
||||
#endif
|
||||
|
@ -127,7 +127,7 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i
|
||||
*/
|
||||
#define ELF_PLAT_INIT(_r) \
|
||||
do { \
|
||||
unsigned long *pos = (unsigned long *)bprm->p, tmp = 1; \
|
||||
target_ulong *pos = (target_ulong *)bprm->p, tmp = 1; \
|
||||
_r->gpr[3] = bprm->argc; \
|
||||
_r->gpr[4] = (unsigned long)++pos; \
|
||||
for (; tmp != 0; pos++) \
|
||||
|
245
ppc-dis.c
245
ppc-dis.c
@ -48,18 +48,18 @@ struct powerpc_opcode
|
||||
|
||||
/* The opcode itself. Those bits which will be filled in with
|
||||
operands are zeroes. */
|
||||
unsigned long opcode;
|
||||
uint32_t opcode;
|
||||
|
||||
/* The opcode mask. This is used by the disassembler. This is a
|
||||
mask containing ones indicating those bits which must match the
|
||||
opcode field, and zeroes indicating those bits which need not
|
||||
match (and are presumably filled in by operands). */
|
||||
unsigned long mask;
|
||||
uint32_t mask;
|
||||
|
||||
/* One bit flags for the opcode. These are used to indicate which
|
||||
specific processors support the instructions. The defined values
|
||||
are listed below. */
|
||||
unsigned long flags;
|
||||
uint32_t flags;
|
||||
|
||||
/* An array of operand codes. Each code is an index into the
|
||||
operand table. They appear in the order which the operands must
|
||||
@ -124,7 +124,7 @@ struct powerpc_operand
|
||||
string (the operand will be inserted in any case). If the
|
||||
operand value is legal, *ERRMSG will be unchanged (most operands
|
||||
can accept any value). */
|
||||
unsigned long (*insert)(unsigned long instruction, long op,
|
||||
unsigned long (*insert)(uint32_t instruction, int32_t op,
|
||||
const char **errmsg);
|
||||
|
||||
/* Extraction function. This is used by the disassembler. To
|
||||
@ -144,10 +144,10 @@ struct powerpc_operand
|
||||
non-zero if this operand type can not actually be extracted from
|
||||
this operand (i.e., the instruction does not match). If the
|
||||
operand is valid, *INVALID will not be changed. */
|
||||
long (*extract) (unsigned long instruction, int *invalid);
|
||||
long (*extract) (uint32_t instruction, int *invalid);
|
||||
|
||||
/* One bit syntax flags. */
|
||||
unsigned long flags;
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
/* Elements in the table are retrieved by indexing with values from
|
||||
@ -244,7 +244,7 @@ struct powerpc_macro
|
||||
/* One bit flags for the opcode. These are used to indicate which
|
||||
specific processors support the instructions. The values are the
|
||||
same as those for the struct powerpc_opcode flags field. */
|
||||
unsigned long flags;
|
||||
uint32_t flags;
|
||||
|
||||
/* A format string to turn the macro into a normal instruction.
|
||||
Each %N in the string is replaced with operand number N (zero
|
||||
@ -288,43 +288,43 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
|
||||
/* Local insertion and extraction functions. */
|
||||
|
||||
static unsigned long insert_bat (unsigned long, long, const char **);
|
||||
static long extract_bat(unsigned long, int *);
|
||||
static unsigned long insert_bba(unsigned long, long, const char **);
|
||||
static long extract_bba(unsigned long, int *);
|
||||
static unsigned long insert_bd(unsigned long, long, const char **);
|
||||
static long extract_bd(unsigned long, int *);
|
||||
static unsigned long insert_bdm(unsigned long, long, const char **);
|
||||
static long extract_bdm(unsigned long, int *);
|
||||
static unsigned long insert_bdp(unsigned long, long, const char **);
|
||||
static long extract_bdp(unsigned long, int *);
|
||||
static unsigned long insert_bo(unsigned long, long, const char **);
|
||||
static long extract_bo(unsigned long, int *);
|
||||
static unsigned long insert_boe(unsigned long, long, const char **);
|
||||
static long extract_boe(unsigned long, int *);
|
||||
static unsigned long insert_ds(unsigned long, long, const char **);
|
||||
static long extract_ds(unsigned long, int *);
|
||||
static unsigned long insert_li(unsigned long, long, const char **);
|
||||
static long extract_li(unsigned long, int *);
|
||||
static unsigned long insert_mbe(unsigned long, long, const char **);
|
||||
static long extract_mbe(unsigned long, int *);
|
||||
static unsigned long insert_mb6(unsigned long, long, const char **);
|
||||
static long extract_mb6(unsigned long, int *);
|
||||
static unsigned long insert_nb(unsigned long, long, const char **);
|
||||
static long extract_nb(unsigned long, int *);
|
||||
static unsigned long insert_nsi(unsigned long, long, const char **);
|
||||
static long extract_nsi(unsigned long, int *);
|
||||
static unsigned long insert_ral(unsigned long, long, const char **);
|
||||
static unsigned long insert_ram(unsigned long, long, const char **);
|
||||
static unsigned long insert_ras(unsigned long, long, const char **);
|
||||
static unsigned long insert_rbs(unsigned long, long, const char **);
|
||||
static long extract_rbs(unsigned long, int *);
|
||||
static unsigned long insert_sh6(unsigned long, long, const char **);
|
||||
static long extract_sh6(unsigned long, int *);
|
||||
static unsigned long insert_spr(unsigned long, long, const char **);
|
||||
static long extract_spr(unsigned long, int *);
|
||||
static unsigned long insert_tbr(unsigned long, long, const char **);
|
||||
static long extract_tbr(unsigned long, int *);
|
||||
static unsigned long insert_bat (uint32_t, int32_t, const char **);
|
||||
static long extract_bat(uint32_t, int *);
|
||||
static unsigned long insert_bba(uint32_t, int32_t, const char **);
|
||||
static long extract_bba(uint32_t, int *);
|
||||
static unsigned long insert_bd(uint32_t, int32_t, const char **);
|
||||
static long extract_bd(uint32_t, int *);
|
||||
static unsigned long insert_bdm(uint32_t, int32_t, const char **);
|
||||
static long extract_bdm(uint32_t, int *);
|
||||
static unsigned long insert_bdp(uint32_t, int32_t, const char **);
|
||||
static long extract_bdp(uint32_t, int *);
|
||||
static unsigned long insert_bo(uint32_t, int32_t, const char **);
|
||||
static long extract_bo(uint32_t, int *);
|
||||
static unsigned long insert_boe(uint32_t, int32_t, const char **);
|
||||
static long extract_boe(uint32_t, int *);
|
||||
static unsigned long insert_ds(uint32_t, int32_t, const char **);
|
||||
static long extract_ds(uint32_t, int *);
|
||||
static unsigned long insert_li(uint32_t, int32_t, const char **);
|
||||
static long extract_li(uint32_t, int *);
|
||||
static unsigned long insert_mbe(uint32_t, int32_t, const char **);
|
||||
static long extract_mbe(uint32_t, int *);
|
||||
static unsigned long insert_mb6(uint32_t, int32_t, const char **);
|
||||
static long extract_mb6(uint32_t, int *);
|
||||
static unsigned long insert_nb(uint32_t, int32_t, const char **);
|
||||
static long extract_nb(uint32_t, int *);
|
||||
static unsigned long insert_nsi(uint32_t, int32_t, const char **);
|
||||
static long extract_nsi(uint32_t, int *);
|
||||
static unsigned long insert_ral(uint32_t, int32_t, const char **);
|
||||
static unsigned long insert_ram(uint32_t, int32_t, const char **);
|
||||
static unsigned long insert_ras(uint32_t, int32_t, const char **);
|
||||
static unsigned long insert_rbs(uint32_t, int32_t, const char **);
|
||||
static long extract_rbs(uint32_t, int *);
|
||||
static unsigned long insert_sh6(uint32_t, int32_t, const char **);
|
||||
static long extract_sh6(uint32_t, int *);
|
||||
static unsigned long insert_spr(uint32_t, int32_t, const char **);
|
||||
static long extract_spr(uint32_t, int *);
|
||||
static unsigned long insert_tbr(uint32_t, int32_t, const char **);
|
||||
static long extract_tbr(uint32_t, int *);
|
||||
|
||||
/* The operands table.
|
||||
|
||||
@ -648,8 +648,8 @@ const struct powerpc_operand powerpc_operands[] =
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_bat (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | (((insn >> 21) & 0x1f) << 16);
|
||||
@ -657,7 +657,7 @@ insert_bat (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_bat (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if (invalid != (int *) NULL
|
||||
@ -675,8 +675,8 @@ extract_bat (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_bba (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | (((insn >> 16) & 0x1f) << 11);
|
||||
@ -684,7 +684,7 @@ insert_bba (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_bba (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if (invalid != (int *) NULL
|
||||
@ -699,8 +699,8 @@ extract_bba (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_bd (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | (value & 0xfffc);
|
||||
@ -709,7 +709,7 @@ insert_bd (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static long
|
||||
extract_bd (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if ((insn & 0x8000) != 0)
|
||||
@ -728,8 +728,8 @@ extract_bd (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_bdm (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if ((value & 0x8000) != 0)
|
||||
@ -739,7 +739,7 @@ insert_bdm (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_bdm (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if (invalid != (int *) NULL
|
||||
@ -759,8 +759,8 @@ extract_bdm (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_bdp (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if ((value & 0x8000) == 0)
|
||||
@ -770,7 +770,7 @@ insert_bdp (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_bdp (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if (invalid != (int *) NULL
|
||||
@ -786,7 +786,7 @@ extract_bdp (insn, invalid)
|
||||
/* Check for legal values of a BO field. */
|
||||
|
||||
static int
|
||||
valid_bo (long value)
|
||||
valid_bo (int32_t value)
|
||||
{
|
||||
/* Certain encodings have bits that are required to be zero. These
|
||||
are (z must be zero, y may be anything):
|
||||
@ -815,8 +815,8 @@ valid_bo (long value)
|
||||
|
||||
static unsigned long
|
||||
insert_bo (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (errmsg != (const char **) NULL
|
||||
@ -827,10 +827,10 @@ insert_bo (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_bo (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
long value;
|
||||
int32_t value;
|
||||
|
||||
value = (insn >> 21) & 0x1f;
|
||||
if (invalid != (int *) NULL
|
||||
@ -845,8 +845,8 @@ extract_bo (insn, invalid)
|
||||
|
||||
static unsigned long
|
||||
insert_boe (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (errmsg != (const char **) NULL)
|
||||
@ -861,10 +861,10 @@ insert_boe (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_boe (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
long value;
|
||||
int32_t value;
|
||||
|
||||
value = (insn >> 21) & 0x1f;
|
||||
if (invalid != (int *) NULL
|
||||
@ -879,8 +879,8 @@ extract_boe (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_ds (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | (value & 0xfffc);
|
||||
@ -889,7 +889,7 @@ insert_ds (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static long
|
||||
extract_ds (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if ((insn & 0x8000) != 0)
|
||||
@ -904,8 +904,8 @@ extract_ds (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_li (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | (value & 0x3fffffc);
|
||||
@ -914,7 +914,7 @@ insert_li (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static long
|
||||
extract_li (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if ((insn & 0x2000000) != 0)
|
||||
@ -930,11 +930,11 @@ extract_li (insn, invalid)
|
||||
|
||||
static unsigned long
|
||||
insert_mbe (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
unsigned long uval;
|
||||
uint32_t uval;
|
||||
int mb, me;
|
||||
|
||||
uval = value;
|
||||
@ -972,7 +972,7 @@ insert_mbe (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_mbe (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
long ret;
|
||||
@ -996,8 +996,8 @@ extract_mbe (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_mb6 (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | ((value & 0x1f) << 6) | (value & 0x20);
|
||||
@ -1006,7 +1006,7 @@ insert_mb6 (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static long
|
||||
extract_mb6 (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
return ((insn >> 6) & 0x1f) | (insn & 0x20);
|
||||
@ -1017,8 +1017,8 @@ extract_mb6 (insn, invalid)
|
||||
|
||||
static unsigned long
|
||||
insert_nb (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (value < 0 || value > 32)
|
||||
@ -1031,7 +1031,7 @@ insert_nb (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static long
|
||||
extract_nb (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
long ret;
|
||||
@ -1050,8 +1050,8 @@ extract_nb (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_nsi (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | ((- value) & 0xffff);
|
||||
@ -1059,7 +1059,7 @@ insert_nsi (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_nsi (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if (invalid != (int *) NULL)
|
||||
@ -1076,8 +1076,8 @@ extract_nsi (insn, invalid)
|
||||
|
||||
static unsigned long
|
||||
insert_ral (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (value == 0
|
||||
@ -1091,8 +1091,8 @@ insert_ral (insn, value, errmsg)
|
||||
|
||||
static unsigned long
|
||||
insert_ram (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (value >= ((insn >> 21) & 0x1f))
|
||||
@ -1106,8 +1106,8 @@ insert_ram (insn, value, errmsg)
|
||||
|
||||
static unsigned long
|
||||
insert_ras (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (value == 0)
|
||||
@ -1124,8 +1124,8 @@ insert_ras (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_rbs (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | (((insn >> 21) & 0x1f) << 11);
|
||||
@ -1133,7 +1133,7 @@ insert_rbs (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_rbs (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
if (invalid != (int *) NULL
|
||||
@ -1147,8 +1147,8 @@ extract_rbs (insn, invalid)
|
||||
/*ARGSUSED*/
|
||||
static unsigned long
|
||||
insert_sh6 (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
|
||||
@ -1157,7 +1157,7 @@ insert_sh6 (insn, value, errmsg)
|
||||
/*ARGSUSED*/
|
||||
static long
|
||||
extract_sh6 (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
|
||||
@ -1168,8 +1168,8 @@ extract_sh6 (insn, invalid)
|
||||
|
||||
static unsigned long
|
||||
insert_spr (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
|
||||
@ -1177,7 +1177,7 @@ insert_spr (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_spr (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
|
||||
@ -1195,8 +1195,8 @@ extract_spr (insn, invalid)
|
||||
|
||||
static unsigned long
|
||||
insert_tbr (insn, value, errmsg)
|
||||
unsigned long insn;
|
||||
long value;
|
||||
uint32_t insn;
|
||||
int32_t value;
|
||||
const char **errmsg;
|
||||
{
|
||||
if (value == 0)
|
||||
@ -1206,7 +1206,7 @@ insert_tbr (insn, value, errmsg)
|
||||
|
||||
static long
|
||||
extract_tbr (insn, invalid)
|
||||
unsigned long insn;
|
||||
uint32_t insn;
|
||||
int *invalid;
|
||||
{
|
||||
long ret;
|
||||
@ -3067,27 +3067,30 @@ const struct powerpc_macro powerpc_macros[] = {
|
||||
const int powerpc_num_macros =
|
||||
sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
|
||||
|
||||
static int print_insn_powerpc(FILE *, unsigned long insn, unsigned memaddr, int dialect);
|
||||
static int print_insn_powerpc(FILE *, uint32_t insn, unsigned memaddr, int dialect);
|
||||
|
||||
/* Print a big endian PowerPC instruction. For convenience, also
|
||||
disassemble instructions supported by the Motorola PowerPC 601. */
|
||||
#include "cpu.h"
|
||||
|
||||
int print_insn_ppc (bfd_vma pc, disassemble_info *info)
|
||||
{
|
||||
return print_insn_powerpc (info->stream,
|
||||
(unsigned int)bfd_getb32((bfd_byte *)pc), pc,
|
||||
PPC_OPCODE_PPC | PPC_OPCODE_601);
|
||||
uint32_t opc;
|
||||
|
||||
(*info->read_memory_func)(pc, (bfd_byte *)(&opc), 4, info);
|
||||
return print_insn_powerpc (info->stream, tswap32(opc), pc,
|
||||
PPC | B32 | M601);
|
||||
}
|
||||
|
||||
/* Print a PowerPC or POWER instruction. */
|
||||
|
||||
static int
|
||||
print_insn_powerpc (FILE *out, unsigned long insn, unsigned memaddr,
|
||||
int
|
||||
print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr,
|
||||
int dialect)
|
||||
{
|
||||
const struct powerpc_opcode *opcode;
|
||||
const struct powerpc_opcode *opcode_end;
|
||||
unsigned long op;
|
||||
uint32_t op;
|
||||
|
||||
/* Get the major opcode of the instruction. */
|
||||
op = PPC_OP (insn);
|
||||
@ -3097,7 +3100,7 @@ print_insn_powerpc (FILE *out, unsigned long insn, unsigned memaddr,
|
||||
opcode_end = powerpc_opcodes + powerpc_num_opcodes;
|
||||
for (opcode = powerpc_opcodes; opcode < opcode_end; opcode++)
|
||||
{
|
||||
unsigned long table_op;
|
||||
uint32_t table_op;
|
||||
const unsigned char *opindex;
|
||||
const struct powerpc_operand *operand;
|
||||
int invalid;
|
||||
@ -3137,7 +3140,7 @@ print_insn_powerpc (FILE *out, unsigned long insn, unsigned memaddr,
|
||||
need_paren = 0;
|
||||
for (opindex = opcode->operands; *opindex != 0; opindex++)
|
||||
{
|
||||
long value;
|
||||
int32_t value;
|
||||
|
||||
operand = powerpc_operands + *opindex;
|
||||
|
||||
@ -3173,20 +3176,20 @@ print_insn_powerpc (FILE *out, unsigned long insn, unsigned memaddr,
|
||||
|
||||
/* Print the operand as directed by the flags. */
|
||||
if ((operand->flags & PPC_OPERAND_GPR) != 0)
|
||||
fprintf(out, "r%ld", value);
|
||||
fprintf(out, "r%d", value);
|
||||
else if ((operand->flags & PPC_OPERAND_FPR) != 0)
|
||||
fprintf(out, "f%ld", value);
|
||||
fprintf(out, "f%d", value);
|
||||
else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
|
||||
fprintf(out, "%08lX", memaddr + value);
|
||||
fprintf(out, "%08X", memaddr + value);
|
||||
else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
|
||||
fprintf(out, "%08lX", value & 0xffffffff);
|
||||
fprintf(out, "%08X", value & 0xffffffff);
|
||||
else if ((operand->flags & PPC_OPERAND_CR) == 0
|
||||
|| (dialect & PPC_OPCODE_PPC) == 0)
|
||||
fprintf(out, "%ld", value);
|
||||
fprintf(out, "%d", value);
|
||||
else
|
||||
{
|
||||
if (operand->bits == 3)
|
||||
fprintf(out, "cr%ld", value);
|
||||
fprintf(out, "cr%d", value);
|
||||
else
|
||||
{
|
||||
static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
|
||||
@ -3226,7 +3229,7 @@ print_insn_powerpc (FILE *out, unsigned long insn, unsigned memaddr,
|
||||
}
|
||||
|
||||
/* We could not find a match. */
|
||||
fprintf(out, ".long 0x%lx", insn);
|
||||
fprintf(out, ".long 0x%x", insn);
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user