gdb/record: add support for more AVX broadcast instructions

This commit adds support for 3 instructions:
* VBROADCASTSS
* VBROADCASTSD
* VBROADCASTF128

and extends the function vpbroadcast_test to include these.
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index ab9ed2f..31a113a 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -4994,6 +4994,14 @@ i386_record_vex (struct i386_record_s *ir, uint8_t vex_w, uint8_t vex_r,
 	}
       break;
 
+    case 0x19:	/* VBROADCASTSD.  */
+      i386_record_modrm (ir);
+      record_full_arch_list_add_reg (ir->regcache,
+				     tdep->ymm0_regnum + ir->reg
+				     + 8 * vex_r);
+      break;
+
+    case 0x18:	/* VBROADCASTSS.  */
     case 0x60:	/* VPUNPCKLBW  */
     case 0x61:	/* VPUNPCKLWD  */
     case 0x62:	/* VPUNPCKLDQ  */
@@ -5038,6 +5046,7 @@ i386_record_vex (struct i386_record_s *ir, uint8_t vex_w, uint8_t vex_r,
     case 0x0c:	/* VPERMILPS with register.  */
     case 0x0d:	/* VPERMILPD with register.  */
     case 0x16:	/* VPERMPS.  */
+    case 0x1a:	/* VBROADCASTF128.  */
     case 0x36:	/* VPERMD.  */
     case 0x40:	/* VPMULLD  */
     case 0x46:	/* VPERM2I128.  */
diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
index 5e0e1a1..8b3f707 100644
--- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
+++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
@@ -245,7 +245,7 @@ vpunpck_test  ()
   return 0; /* end vpunpck_test */
 }
 
-/* Test if we can record vpbroadcast instructions.  */
+/* Test if we can record vpbroadcast and vbroadcast instructions.  */
 int
 vpbroadcast_test ()
 {
@@ -268,6 +268,14 @@ vpbroadcast_test ()
   asm volatile ("vpbroadcastq %xmm1, %ymm0");
   asm volatile ("vpbroadcastq %xmm1, %ymm15");
 
+  asm volatile ("vbroadcastss %xmm1, %xmm0");
+  asm volatile ("vbroadcastss %xmm1, %ymm15");
+  asm volatile ("vbroadcastss %0, %%ymm0" : : "m" (global_buf0));
+  asm volatile ("vbroadcastss %0, %%xmm15": : "m" (dyn_buf0));
+  asm volatile ("vbroadcastsd %xmm1, %ymm0");
+  asm volatile ("vbroadcastsd %0, %%ymm15": : "m" (global_buf0));
+  asm volatile ("vbroadcastf128 %0, %%ymm0" : : "m" (dyn_buf0));
+
   /* We have a return statement to deal with
      epilogue in different compilers.  */
   return 0; /* end vpbroadcast_test */
diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
index 0a56813..ae13a6e 100644
--- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
@@ -365,6 +365,24 @@
     "set xmm1 for vpbroadcast"
 gdb_test_no_output "set \$ymm15.v2_int128 = {0x0, 0x0}" "set xmm15 for vpbroadcast"
 if {[record_full_function "vpbroadcast"] == true} {
+    test_one_register "vbroadcastf128" "ymm0" \
+	"0x17161514131211101716151413121110, 0x17161514131211101716151413121110"
+    test_one_register "vbroadcastsd" "ymm15" \
+	"0x404060004040600040406000404060, 0x0"
+    test_one_register "vbroadcastsd" "ymm0" \
+	"0x13121110131211101312111013121110, 0x13121110131211101312111013121110"
+
+    test_one_register "vbroadcastss" "ymm15" \
+	"0x13121110131211101312111013121110, 0x13121110131211101312111013121110" \
+	"broadcast from memory"
+    test_one_register "vbroadcastss" "ymm0" \
+	"0x13121110131211101312111013121110, 0x0" \
+	"broadcast from memory"
+    test_one_register "vbroadcastss" "ymm15" \
+	"0x17161514131211101716151413121110, 0x17161514131211101716151413121110"
+    test_one_register "vbroadcastss" "ymm0" \
+	"0x17161514131211101716151413121110, 0x17161514131211101716151413121110"
+
     test_one_register "vpbroadcastq" "ymm15" "0x13121110131211101312111013121110, 0x0"
     test_one_register "vpbroadcastq" "ymm0"  "0x13121110131211101312111013121110, 0x0"