/* THIS FILE IS GENERATED.  Original: mips-linux.xml */

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

struct target_desc *tdesc_mips_linux;
static void
initialize_tdesc_mips_linux (void)
{
  struct target_desc *result = allocate_target_description ();
  struct tdesc_feature *feature;

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

  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "lo", 33, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "hi", 34, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "pc", 37, 1, NULL, 32, "int");

  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
  tdesc_create_reg (feature, "status", 32, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 32, "int");
  tdesc_create_reg (feature, "cause", 36, 1, NULL, 32, "int");

  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
  tdesc_create_reg (feature, "f0", 38, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f1", 39, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f2", 40, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f3", 41, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f4", 42, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f5", 43, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f6", 44, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f7", 45, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f8", 46, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f9", 47, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f10", 48, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f11", 49, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f12", 50, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f13", 51, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f14", 52, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f15", 53, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f16", 54, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f17", 55, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f18", 56, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f19", 57, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f20", 58, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f21", 59, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f22", 60, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f23", 61, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f24", 62, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f25", 63, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f26", 64, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f27", 65, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f28", 66, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f29", 67, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f30", 68, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "f31", 69, 1, NULL, 32, "ieee_single");
  tdesc_create_reg (feature, "fcsr", 70, 1, "float", 32, "int");
  tdesc_create_reg (feature, "fir", 71, 1, "float", 32, "int");

  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
  tdesc_create_reg (feature, "restart", 72, 1, "system", 32, "int");

  tdesc_mips_linux = result;
}
