/* Print NFP instructions for objdump.
- Copyright (C) 2017-2018 Free Software Foundation, Inc.
+ Copyright (C) 2017-2019 Free Software Foundation, Inc.
Contributed by Francois H. Theron <francois.theron@netronome.com>
This file is part of the GNU opcodes library.
#include "elf-bfd.h"
#include "bfd.h"
#include "bfd_stdint.h"
-#include "libbfd.h"
#define _NFP_ERR_STOP -1
#define _NFP_ERR_CONT -8
-/* The bfd_vma type has the description below, so we use that and BFD_VMA_FMT
- instead of uint64_t or bfd_uint64_t.
- "Represent a target address. Also used as a generic unsigned type
- which is guaranteed to be big enough to hold any arithmetic types
- we need to deal with." */
-
#define _BTST(v, b) (((v) >> b) & 1)
-#define _BF(v, msb, lsb) (((v) >> (lsb)) & ((1U << ((msb) - (lsb) + 1)) - 1))
+#define _BF(v, msb, lsb) (((v) >> (lsb)) & \
+ ((1U << ((msb) - (lsb) + 1)) - 1))
#define _BFS(v, msb, lsb, lshift) (_BF(v, msb, lsb) << (lshift))
#define _NFP_ME27_28_CSR_CTX_ENABLES 0x18
};
static int
-nfp_me_print_invalid (bfd_vma instr, struct disassemble_info *dinfo)
+nfp_me_print_invalid (uint64_t instr, struct disassemble_info *dinfo)
{
const char * err_msg = N_("<invalid_instruction>:");
- dinfo->fprintf_func (dinfo->stream, "%s 0x%" BFD_VMA_FMT "x", err_msg, instr);
+ dinfo->fprintf_func (dinfo->stream, "%s 0x%" PRIx64, err_msg, instr);
return _NFP_ERR_CONT;
}
}
static int
-nfp_me27_28_print_alu_shf (bfd_vma instr, unsigned int pred_cc,
+nfp_me27_28_print_alu_shf (uint64_t instr, unsigned int pred_cc,
unsigned int dst_lmext, unsigned int src_lmext,
unsigned int gpr_wrboth,
int num_ctx, struct disassemble_info *dinfo)
}
static int
-nfp_me27_28_print_alu (bfd_vma instr, unsigned int pred_cc,
+nfp_me27_28_print_alu (uint64_t instr, unsigned int pred_cc,
unsigned int dst_lmext, unsigned int src_lmext,
unsigned int gpr_wrboth,
int num_ctx, struct disassemble_info *dinfo)
case 18:
do_close_bracket = 0;
dinfo->fprintf_func (dinfo->stream, "crc_%s[",
- _BTST (instr, 3) ? "le" : "be");
- if (!nfp_me27_28_crc_op[_BF (instr, 7, 5)])
+ _BTST (srcA, 3) ? "le" : "be");
+ if (!nfp_me27_28_crc_op[_BF (srcA, 7, 5)])
{
dinfo->fprintf_func (dinfo->stream, _(", <invalid CRC operator>, "));
err = TRUE;
else
{
dinfo->fprintf_func (dinfo->stream, "%s, ",
- nfp_me27_28_crc_op[_BF (instr, 7, 5)]);
+ nfp_me27_28_crc_op[_BF (srcA, 7, 5)]);
}
/* Dest operand. */
num_ctx, src_lmext, dinfo);
dinfo->fprintf_func (dinfo->stream, "]");
- if (_BF (instr, 2, 0))
+ if (_BF (srcA, 2, 0))
dinfo->fprintf_func (dinfo->stream, ", %s",
- nfp_me27_28_crc_bytes[_BF (instr, 2, 0)]);
- if (_BTST (instr, 4))
+ nfp_me27_28_crc_bytes[_BF (srcA, 2, 0)]);
+ if (_BTST (srcA, 4))
dinfo->fprintf_func (dinfo->stream, ", bit_swap");
break;
}
static int
-nfp_me27_28_print_immed (bfd_vma instr, unsigned int pred_cc,
+nfp_me27_28_print_immed (uint64_t instr, unsigned int pred_cc,
unsigned int dst_lmext,
unsigned int gpr_wrboth,
int num_ctx, struct disassemble_info *dinfo)
}
static int
-nfp_me27_28_print_ld_field (bfd_vma instr, unsigned int pred_cc,
+nfp_me27_28_print_ld_field (uint64_t instr, unsigned int pred_cc,
unsigned int dst_lmext, unsigned int src_lmext,
unsigned int gpr_wrboth,
int num_ctx, struct disassemble_info *dinfo)
}
static int
-nfp_me27_28_print_ctx_arb (bfd_vma instr, struct disassemble_info *dinfo)
+nfp_me27_28_print_ctx_arb (uint64_t instr, struct disassemble_info *dinfo)
{
unsigned int resume_addr = _BFS (instr, 40, 40, 13) | _BF (instr, 34, 22);
unsigned int defer = _BF (instr, 21, 20);
}
static int
-nfp_me27_28_print_local_csr (bfd_vma instr,
+nfp_me27_28_print_local_csr (uint64_t instr,
unsigned int src_lmext,
int num_ctx, struct disassemble_info *dinfo)
{
}
static int
-nfp_me27_28_print_branch (bfd_vma instr,
+nfp_me27_28_print_branch (uint64_t instr,
const char *br_inpstates[16],
struct disassemble_info *dinfo)
{
}
static int
-nfp_me27_28_print_br_byte (bfd_vma instr,
+nfp_me27_28_print_br_byte (uint64_t instr,
unsigned int src_lmext, int num_ctx,
struct disassemble_info *dinfo)
{
}
static int
-nfp_me27_28_print_br_bit (bfd_vma instr, unsigned int src_lmext,
+nfp_me27_28_print_br_bit (uint64_t instr, unsigned int src_lmext,
int num_ctx, struct disassemble_info *dinfo)
{
unsigned int srcA = _BF (instr, 7, 0);
}
static int
-nfp_me27_28_print_br_alu (bfd_vma instr, unsigned int src_lmext,
+nfp_me27_28_print_br_alu (uint64_t instr, unsigned int src_lmext,
int num_ctx, struct disassemble_info *dinfo)
{
unsigned int srcA = _BF (instr, 9, 0);
}
static int
-nfp_me27_28_print_mult (bfd_vma instr, unsigned int pred_cc,
+nfp_me27_28_print_mult (uint64_t instr, unsigned int pred_cc,
unsigned int dst_lmext, unsigned int src_lmext,
unsigned int gpr_wrboth,
int num_ctx, struct disassemble_info *dinfo)
/* NFP-32xx (ME Version 2.7). */
static int
-nfp_me27_print_cmd (bfd_vma instr, int third_party_32bit,
+nfp_me27_print_cmd (uint64_t instr, int third_party_32bit,
int num_ctx, struct disassemble_info *dinfo)
{
unsigned int srcA = _BF (instr, 7, 0);
}
static int
-nfp_me27_print_alu_shf (bfd_vma instr, int num_ctx,
+nfp_me27_print_alu_shf (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_alu_shf (instr, 0, 0, 0, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_alu (bfd_vma instr, int num_ctx,
+nfp_me27_print_alu (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_alu_shf (instr, 0, 0, 0, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_immed (bfd_vma instr, int num_ctx,
+nfp_me27_print_immed (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_immed (instr, 0, 0, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_ld_field (bfd_vma instr, int num_ctx,
+nfp_me27_print_ld_field (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_ld_field (instr, 0, 0, 0, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_ctx_arb (bfd_vma instr, struct disassemble_info *dinfo)
+nfp_me27_print_ctx_arb (uint64_t instr, struct disassemble_info *dinfo)
{
return nfp_me27_28_print_ctx_arb (instr, dinfo);
}
static int
-nfp_me27_print_local_csr (bfd_vma instr, int num_ctx,
+nfp_me27_print_local_csr (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_local_csr (instr, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_branch (bfd_vma instr, struct disassemble_info *dinfo)
+nfp_me27_print_branch (uint64_t instr, struct disassemble_info *dinfo)
{
return nfp_me27_28_print_branch (instr, nfp_me27_br_inpstates, dinfo);
}
static int
-nfp_me27_print_br_byte (bfd_vma instr, int num_ctx,
+nfp_me27_print_br_byte (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_br_byte (instr, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_br_bit (bfd_vma instr, int num_ctx,
+nfp_me27_print_br_bit (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_br_bit (instr, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_br_alu (bfd_vma instr, int num_ctx,
+nfp_me27_print_br_alu (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_br_alu (instr, 0, num_ctx, dinfo);
}
static int
-nfp_me27_print_mult (bfd_vma instr, int num_ctx,
+nfp_me27_print_mult (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
return nfp_me27_28_print_mult (instr, 0, 0, 0, 0, num_ctx, dinfo);
/*NFP-6xxx/4xxx (ME Version 2.8). */
static int
-nfp_me28_print_cmd (bfd_vma instr, int third_party_32bit,
+nfp_me28_print_cmd (uint64_t instr, int third_party_32bit,
int num_ctx, struct disassemble_info *dinfo)
{
unsigned int srcA = _BF (instr, 7, 0);
}
static int
-nfp_me28_print_alu_shf (bfd_vma instr, int num_ctx,
+nfp_me28_print_alu_shf (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int gpr_wrboth = _BTST (instr, 41);
}
static int
-nfp_me28_print_alu (bfd_vma instr, int num_ctx,
+nfp_me28_print_alu (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int gpr_wrboth = _BTST (instr, 41);
}
static int
-nfp_me28_print_immed (bfd_vma instr, int num_ctx,
+nfp_me28_print_immed (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int gpr_wrboth = _BTST (instr, 41);
}
static int
-nfp_me28_print_ld_field (bfd_vma instr, int num_ctx,
+nfp_me28_print_ld_field (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int gpr_wrboth = _BTST (instr, 41);
}
static int
-nfp_me28_print_ctx_arb (bfd_vma instr, struct disassemble_info *dinfo)
+nfp_me28_print_ctx_arb (uint64_t instr, struct disassemble_info *dinfo)
{
return nfp_me27_28_print_ctx_arb (instr, dinfo);
}
static int
-nfp_me28_print_local_csr (bfd_vma instr, int num_ctx,
+nfp_me28_print_local_csr (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int src_lmext = _BTST (instr, 42);
}
static int
-nfp_me28_print_branch (bfd_vma instr, struct disassemble_info *dinfo)
+nfp_me28_print_branch (uint64_t instr, struct disassemble_info *dinfo)
{
return nfp_me27_28_print_branch (instr, nfp_me28_br_inpstates, dinfo);
}
static int
-nfp_me28_print_br_byte (bfd_vma instr, int num_ctx,
+nfp_me28_print_br_byte (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int src_lmext = _BTST (instr, 42);
}
static int
-nfp_me28_print_br_bit (bfd_vma instr, int num_ctx,
+nfp_me28_print_br_bit (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int src_lmext = _BTST (instr, 42);
}
static int
-nfp_me28_print_br_alu (bfd_vma instr, int num_ctx,
+nfp_me28_print_br_alu (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int src_lmext = _BTST (instr, 42);
}
static int
-nfp_me28_print_mult (bfd_vma instr, int num_ctx,
+nfp_me28_print_mult (uint64_t instr, int num_ctx,
struct disassemble_info *dinfo)
{
unsigned int gpr_wrboth = _BTST (instr, 41);
mecfg = &priv->mecfgs[isl][menum][1];
- if (!_bfd_generic_get_section_contents (dinfo->section->owner,
- sec->bfd_section, buffer,
- roff, sizeof (buffer)))
+ if (!bfd_get_section_contents (dinfo->section->owner, sec->bfd_section,
+ buffer, roff, sizeof (buffer)))
return FALSE;
mecfg_ent.ctx_enables = bfd_getl32 (buffer + offsetof (Elf_Nfp_MeConfig,
uint32_t csr_off;
nfp_priv_mecfg *mecfg;
- if (!_bfd_generic_get_section_contents (dinfo->section->owner,
- sec->bfd_section, buffer,
- ireg_off, sizeof (buffer)))
+ if (!bfd_get_section_contents (dinfo->section->owner, sec->bfd_section,
+ buffer, ireg_off, sizeof (buffer)))
return FALSE;
ireg.cpp_offset_lo = bfd_getl32 (buffer
nfp_priv_data *priv = init_nfp_priv (dinfo);
bfd_byte buffer[8];
int err;
- bfd_vma instr = 0;
+ uint64_t instr = 0;
size_t island, menum;
int num_ctx, scs_cnt, addr_3rdparty32, pc, tmpi, tmpj;
int is_text = 1;
fprintf (stream, _("\n\
no-pc Don't print program counter prefix.\n\
ctx4 Force disassembly using 4-context mode.\n\
- ctx8 Force 8-context mode, takes presedence.\""));
+ ctx8 Force 8-context mode, takes precedence."));
fprintf (stream, _("\n"));
}