/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
  Original: tic6x-c64xp-linux.xml */

#include "defs.h"
#include "osabi.h"
#include "target-descriptions.h"

struct target_desc *tdesc_tic6x_c64xp_linux;
static void
initialize_tdesc_tic6x_c64xp_linux (void)
{
  struct target_desc *result = allocate_target_description ();
  struct tdesc_feature *feature;

  set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));

  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));

  feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core");
  tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A2", 2, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A3", 3, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A4", 4, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A5", 5, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A6", 6, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A7", 7, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A8", 8, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A9", 9, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A10", 10, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A11", 11, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A12", 12, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A13", 13, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A14", 14, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A15", 15, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B0", 16, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B1", 17, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B2", 18, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B3", 19, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B4", 20, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B5", 21, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B6", 22, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B7", 23, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B8", 24, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B9", 25, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B10", 26, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B11", 27, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B12", 28, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B13", 29, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B14", 30, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B15", 31, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "CSR", 32, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "PC", 33, 1, NULL, 32, "code_ptr");

  feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.gp");
  tdesc_create_reg (feature, "A16", 34, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A17", 35, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A18", 36, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A19", 37, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A20", 38, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A21", 39, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A22", 40, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A23", 41, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A24", 42, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A25", 43, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A26", 44, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A27", 45, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A28", 46, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A29", 47, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A30", 48, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "A31", 49, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B16", 50, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B17", 51, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B18", 52, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B19", 53, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B20", 54, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B21", 55, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B22", 56, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B23", 57, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B24", 58, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B25", 59, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B26", 60, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B27", 61, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B28", 62, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B29", 63, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B30", 64, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "B31", 65, 1, NULL, 32, "uint32");

  feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.c6xp");
  tdesc_create_reg (feature, "TSR", 66, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "ILC", 67, 1, NULL, 32, "uint32");
  tdesc_create_reg (feature, "RILC", 68, 1, NULL, 32, "uint32");

  tdesc_tic6x_c64xp_linux = result;
}
