Index: gcc/config/mips/mips-tables.opt
===================================================================
--- gcc/config/mips/mips-tables.opt	(revision 185629)
+++ gcc/config/mips/mips-tables.opt	(working copy)
@@ -609,3 +609,6 @@ Enum(mips_arch_opt_value) String(octeon+
 EnumValue
 Enum(mips_arch_opt_value) String(octeon2) Value(82) Canonical
 
+EnumValue
+Enum(mips_arch_opt_value) String(xlp) Value(83) Canonical
+
Index: gcc/config/mips/mips.md
===================================================================
--- gcc/config/mips/mips.md	(revision 185629)
+++ gcc/config/mips/mips.md	(working copy)
@@ -65,6 +65,7 @@
   sb1a
   sr71000
   xlr
+  xlp
 ])
 
 (define_c_enum "unspec" [
Index: gcc/config/mips/mips-cpus.def
===================================================================
--- gcc/config/mips/mips-cpus.def	(revision 185629)
+++ gcc/config/mips/mips-cpus.def	(working copy)
@@ -147,3 +147,4 @@ MIPS_CPU ("loongson3a", PROCESSOR_LOONGS
 MIPS_CPU ("octeon", PROCESSOR_OCTEON, 65, PTF_AVOID_BRANCHLIKELY)
 MIPS_CPU ("octeon+", PROCESSOR_OCTEON, 65, PTF_AVOID_BRANCHLIKELY)
 MIPS_CPU ("octeon2", PROCESSOR_OCTEON2, 65, PTF_AVOID_BRANCHLIKELY)
+MIPS_CPU ("xlp", PROCESSOR_XLP, 65, PTF_AVOID_BRANCHLIKELY)
Index: gcc/config/mips/mips.c
===================================================================
--- gcc/config/mips/mips.c	(revision 185629)
+++ gcc/config/mips/mips.c	(working copy)
@@ -1086,6 +1086,20 @@ static const struct mips_rtx_cost_data
     COSTS_N_INSNS (72),           /* int_div_di */
 		     1,           /* branch_cost */
 		     4            /* memory_latency */
+  },
+  { /* XLP */
+    /* These costs are the same as 5KF above.  */
+    COSTS_N_INSNS (4),            /* fp_add */
+    COSTS_N_INSNS (4),            /* fp_mult_sf */
+    COSTS_N_INSNS (5),            /* fp_mult_df */
+    COSTS_N_INSNS (17),           /* fp_div_sf */
+    COSTS_N_INSNS (32),           /* fp_div_df */
+    COSTS_N_INSNS (4),            /* int_mult_si */
+    COSTS_N_INSNS (11),           /* int_mult_di */
+    COSTS_N_INSNS (36),           /* int_div_si */
+    COSTS_N_INSNS (68),           /* int_div_di */
+		     1,           /* branch_cost */
+		     4            /* memory_latency */
   }
 };
 
Index: gcc/config/mips/mips.h
===================================================================
--- gcc/config/mips/mips.h	(revision 185629)
+++ gcc/config/mips/mips.h	(working copy)
@@ -701,7 +701,7 @@ struct mips_cpu_info {
        |march=34k*|march=74k*|march=1004k*: -mips32r2} \
      %{march=mips64|march=5k*|march=20k*|march=sb1*|march=sr71000 \
        |march=xlr|march=loongson3a: -mips64} \
-     %{march=mips64r2|march=octeon: -mips64r2} \
+     %{march=mips64r2|march=octeon|march=xlp: -mips64r2} \
      %{!march=*: -" MULTILIB_ISA_DEFAULT "}}"
 
 /* A spec that infers a -mhard-float or -msoft-float setting from an
