Skip to content
Snippets Groups Projects
m32c.opc 28 KiB
Newer Older
Jim Blandy's avatar
Jim Blandy committed
{
  print_suffix (dis_info, 'g');
}

static void
print_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
	 void * dis_info,
Jim Blandy's avatar
Jim Blandy committed
	 long value ATTRIBUTE_UNUSED,
	 unsigned int attrs ATTRIBUTE_UNUSED,
	 bfd_vma pc ATTRIBUTE_UNUSED,
	 int length ATTRIBUTE_UNUSED)
{
  print_suffix (dis_info, 'q');
}

static void
print_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
	 void * dis_info,
Jim Blandy's avatar
Jim Blandy committed
	 long value ATTRIBUTE_UNUSED,
	 unsigned int attrs ATTRIBUTE_UNUSED,
	 bfd_vma pc ATTRIBUTE_UNUSED,
	 int length ATTRIBUTE_UNUSED)
{
  print_suffix (dis_info, 'z');
}

/* Print the empty suffix.  */

Jim Blandy's avatar
Jim Blandy committed
static void
print_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
	 void * dis_info ATTRIBUTE_UNUSED,
Jim Blandy's avatar
Jim Blandy committed
	 long value ATTRIBUTE_UNUSED,
	 unsigned int attrs ATTRIBUTE_UNUSED,
	 bfd_vma pc ATTRIBUTE_UNUSED,
	 int length ATTRIBUTE_UNUSED)
{
  return;
}

static void
print_r0l_r0h (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
	       void * dis_info,
Jim Blandy's avatar
Jim Blandy committed
	       long value,
	       unsigned int attrs ATTRIBUTE_UNUSED,
	       bfd_vma pc ATTRIBUTE_UNUSED,
	       int length ATTRIBUTE_UNUSED)
{
  disassemble_info *info = dis_info;
Jim Blandy's avatar
Jim Blandy committed
  if (value == 0)
    (*info->fprintf_func) (info->stream, "r0h,r0l");
  else
    (*info->fprintf_func) (info->stream, "r0l,r0h");
}

static void
print_unsigned_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
			void * dis_info,
Jim Blandy's avatar
Jim Blandy committed
			unsigned long value,
			unsigned int attrs ATTRIBUTE_UNUSED,
			bfd_vma pc ATTRIBUTE_UNUSED,
			int length ATTRIBUTE_UNUSED)
{
  disassemble_info *info = dis_info;
Jim Blandy's avatar
Jim Blandy committed
  (*info->fprintf_func) (info->stream, "%ld,0x%lx", value & 0x7, value >> 3);
}

static void
print_signed_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
		      void * dis_info,
Jim Blandy's avatar
Jim Blandy committed
		      signed long value,
		      unsigned int attrs ATTRIBUTE_UNUSED,
		      bfd_vma pc ATTRIBUTE_UNUSED,
		      int length ATTRIBUTE_UNUSED)
{
  disassemble_info *info = dis_info;
Jim Blandy's avatar
Jim Blandy committed
  (*info->fprintf_func) (info->stream, "%ld,%ld", value & 0x7, value >> 3);
}

static void
print_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
	    void * dis_info,
Jim Blandy's avatar
Jim Blandy committed
	    long value ATTRIBUTE_UNUSED,
	    unsigned int attrs ATTRIBUTE_UNUSED,
	    bfd_vma pc ATTRIBUTE_UNUSED,
	    int length ATTRIBUTE_UNUSED)
{
  /* Always print the size as '.w'.  */
Jim Blandy's avatar
Jim Blandy committed
  disassemble_info *info = dis_info;
Jim Blandy's avatar
Jim Blandy committed
  (*info->fprintf_func) (info->stream, ".w");
}

#define POP  0
Jim Blandy's avatar
Jim Blandy committed
#define PUSH 1

static void print_pop_regset  (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
static void print_push_regset (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
Jim Blandy's avatar
Jim Blandy committed

/* Print a set of registers, R0,R1,A0,A1,SB,FB.  */

static void
print_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
	      void * dis_info,
	      long value,
	      unsigned int attrs ATTRIBUTE_UNUSED,
	      bfd_vma pc ATTRIBUTE_UNUSED,
	      int length ATTRIBUTE_UNUSED,
	      int push)
Jim Blandy's avatar
Jim Blandy committed
{
  static char * m16c_register_names [] = 
  {
    "r0", "r1", "r2", "r3", "a0", "a1", "sb", "fb"
  };
Jim Blandy's avatar
Jim Blandy committed
  disassemble_info *info = dis_info;
  int mask;
Jim Blandy's avatar
Jim Blandy committed
  char* comma = "";

  if (push)
    mask = 0x80;
  else
    mask = 1;
 
  if (value & mask)
    {
      (*info->fprintf_func) (info->stream, "%s", m16c_register_names [0]);
      comma = ",";
    }

  for (reg_index = 1; reg_index <= 7; ++reg_index)
Jim Blandy's avatar
Jim Blandy committed
    {
      if (push)
        mask >>= 1;
      else
        mask <<= 1;

      if (value & mask)
        {
          (*info->fprintf_func) (info->stream, "%s%s", comma,
Jim Blandy's avatar
Jim Blandy committed
          comma = ",";
        }
    }
}

static void
print_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
		  void * dis_info,
		  long value,
		  unsigned int attrs ATTRIBUTE_UNUSED,
		  bfd_vma pc ATTRIBUTE_UNUSED,
		  int length ATTRIBUTE_UNUSED)
Jim Blandy's avatar
Jim Blandy committed
{
  print_regset (cd, dis_info, value, attrs, pc, length, POP);
}

static void
print_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
		   void * dis_info,
		   long value,
		   unsigned int attrs ATTRIBUTE_UNUSED,
		   bfd_vma pc ATTRIBUTE_UNUSED,
		   int length ATTRIBUTE_UNUSED)
Jim Blandy's avatar
Jim Blandy committed
{
  print_regset (cd, dis_info, value, attrs, pc, length, PUSH);
}

static void
print_signed4n (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
		void * dis_info,
		signed long value,
		unsigned int attrs ATTRIBUTE_UNUSED,
		bfd_vma pc ATTRIBUTE_UNUSED,
		int length ATTRIBUTE_UNUSED)
{
  disassemble_info *info = dis_info;

  (*info->fprintf_func) (info->stream, "%ld", -value);
}