Blame SOURCES/gdb-rhbz1320945-power9-32of38.patch

01917d
commit 6fd3a02da5548c71ff469f978444ef6c3af18783
01917d
Author: Peter Bergner <bergner@vnet.ibm.com>
01917d
Date:   Wed Jun 22 17:55:17 2016 -0500
01917d
01917d
    Add support for yet some more new ISA 3.0 instructions.
01917d
    
01917d
    opcodes/
01917d
            * ppc-opc.c (RM, DRM, VXASH, VXASH_MASK, XMMF, XMMF_MASK): New defines.
01917d
            (powerpc_opcodes) 
01917d
            mffscrn, mffscrni, mffsl, nandxor, rldixor, setbool,
01917d
            xor3>: New mnemonics.
01917d
            <setb>: Change to a VX form instruction.
01917d
            (insert_sh6): Add support for rldixor.
01917d
            (extract_sh6): Likewise.
01917d
    
01917d
    gas/
01917d
            * testsuite/gas/ppc/power9.d 
01917d
            mffscdrn, mffscdrni, mffscrn, mffscrni, mffsl, nandxor, rldixor,
01917d
            setbool, xor3>: New tests.
01917d
            * testsuite/gas/ppc/power9.s: Likewise.
01917d
01917d
### a/opcodes/ChangeLog
01917d
### b/opcodes/ChangeLog
01917d
## -1,3 +1,13 @@
01917d
+2016-06-22  Peter Bergner <bergner@vnet.ibm.com>
01917d
+
01917d
+	* ppc-opc.c (RM, DRM, VXASH, VXASH_MASK, XMMF, XMMF_MASK): New defines.
01917d
+	(powerpc_opcodes) 
01917d
+	mffscrn, mffscrni, mffsl, nandxor, rldixor, setbool,
01917d
+	xor3>: New mnemonics.
01917d
+	<setb>: Change to a VX form instruction.
01917d
+	(insert_sh6): Add support for rldixor.
01917d
+	(extract_sh6): Likewise.
01917d
+
01917d
 2016-06-22  Trevor Saunders  <tbsaunde+binutils@tbsaunde.org>
01917d
 
01917d
 	* arc-ext.h: Wrap in extern C.
01917d
--- a/opcodes/ppc-opc.c
01917d
+++ b/opcodes/ppc-opc.c
01917d
@@ -238,7 +238,11 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define BOE BO + 1
01917d
   { 0x1e, 21, insert_boe, extract_boe, 0 },
01917d
 
01917d
-#define BH BOE + 1
01917d
+  /* The RM field in an X form instruction.  */
01917d
+#define RM BOE + 1
01917d
+  { 0x3, 11, NULL, NULL, 0 },
01917d
+
01917d
+#define BH RM + 1
01917d
   { 0x3, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
01917d
 
01917d
   /* The BT field in an X or XL form instruction.  */
01917d
@@ -786,8 +790,9 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define EVUIMM_8 EVUIMM_4 + 1
01917d
   { 0xf8, 8, NULL, NULL, PPC_OPERAND_PARENS },
01917d
 
01917d
-  /* The WS field.  */
01917d
+  /* The WS or DRM field in an X form instruction.  */
01917d
 #define WS EVUIMM_8 + 1
01917d
+#define DRM WS
01917d
   { 0x7, 11, NULL, NULL, 0 },
01917d
 
01917d
   /* PowerPC paired singles extensions.  */
01917d
@@ -2017,7 +2022,11 @@ insert_sh6 (unsigned long insn,
01917d
 	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
 	    const char **errmsg ATTRIBUTE_UNUSED)
01917d
 {
01917d
-  return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
01917d
+  /* SH6 operand in the rldixor instructions.  */
01917d
+  if (PPC_OP (insn) == 4)
01917d
+    return insn | ((value & 0x1f) << 6) | ((value & 0x20) >> 5);
01917d
+  else
01917d
+    return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
01917d
 }
01917d
 
01917d
 static long
01917d
@@ -2025,7 +2034,11 @@ extract_sh6 (unsigned long insn,
01917d
 	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
 	     int *invalid ATTRIBUTE_UNUSED)
01917d
 {
01917d
-  return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
01917d
+  /* SH6 operand in the rldixor instructions.  */
01917d
+  if (PPC_OP (insn) == 4)
01917d
+    return ((insn >> 6) & 0x1f) | ((insn << 5) & 0x20);
01917d
+  else
01917d
+    return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
01917d
 }
01917d
 
01917d
 /* The SPR field in an XFX form instruction.  This is flipped--the
01917d
@@ -2608,6 +2621,9 @@ extract_vleil (unsigned long insn,
01917d
 /* A VX form instruction with a VA tertiary opcode.  */
01917d
 #define VXVA(op, xop, vaop) (VX(op,xop) | (((vaop) & 0x1f) << 16))
01917d
 
01917d
+#define VXASH(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
01917d
+#define VXASH_MASK VXASH (0x3f, 0x1f)
01917d
+
01917d
 /* An X form instruction.  */
01917d
 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
01917d
 
01917d
@@ -2644,6 +2660,9 @@ extract_vleil (unsigned long insn,
01917d
 /* A X form instruction for Quad-Precision FP Instructions with RC bit.  */
01917d
 #define XVARC(op, xop, vaop, rc) (XVA ((op), (xop), (vaop)) | ((rc) & 1))
01917d
 
01917d
+/* An X form instruction with the RA bits specified as two ops.  */
01917d
+#define XMMF(op, xop, mop0, mop1) (X ((op), (xop)) | ((mop0) & 3) << 19 | ((mop1) & 7) << 16)
01917d
+
01917d
 /* A Z form instruction with the RC bit specified.  */
01917d
 #define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1))
01917d
 
01917d
@@ -2696,6 +2715,9 @@ extract_vleil (unsigned long insn,
01917d
 /* An X form wait instruction with everything filled in except the WC field.  */
01917d
 #define XWC_MASK (XRC (0x3f, 0x3ff, 1) | (7 << 23) | RA_MASK | RB_MASK)
01917d
 
01917d
+/* The mask for an XMMF form instruction.  */
01917d
+#define XMMF_MASK (XMMF (0x3f, 0x3ff, 3, 7) | (1))
01917d
+
01917d
 /* The mask for a Z form instruction.  */
01917d
 #define Z_MASK ZRC (0x3f, 0x1ff, 1)
01917d
 #define Z2_MASK ZRC (0x3f, 0xff, 1)
01917d
@@ -3139,6 +3161,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"machhwu.",	XO (4,	12,0,1), XO_MASK,    MULHW,	0,		{RT, RA, RB}},
01917d
 {"ps_muls1",	A  (4,	13,0),	AFRB_MASK,   PPCPS,	0,		{FRT, FRA, FRC}},
01917d
 {"ps_muls1.",	A  (4,	13,1),	AFRB_MASK,   PPCPS,	0,		{FRT, FRA, FRC}},
01917d
+{"rldixor",	VXASH(4,26),	VXASH_MASK,  POWER9,	0,		{RA, RS, SH6, RB}},
01917d
 {"ps_madds0",	A  (4,	14,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
 {"ps_madds0.",	A  (4,	14,1),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
 {"ps_madds1",	A  (4,	15,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
@@ -3180,6 +3203,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"ps_msub.",	A  (4,	28,1),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
 {"ps_madd",	A  (4,	29,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
 {"ps_madd.",	A  (4,	29,1),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
+{"xor3",	VXA(4,	54),	VXA_MASK,    POWER9,	0,		{RA, RS, RB, RC}},
01917d
+{"nandxor",	VXA(4,	55),	VXA_MASK,    POWER9,	0,		{RA, RS, RB, RC}},
01917d
 {"vpermr",	VXA(4,	59),	VXA_MASK,    PPCVEC3,	0,		{VD, VA, VB, VC}},
01917d
 {"ps_nmsub",	A  (4,	30,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
01917d
 {"vaddeuqm",	VXA(4,	60),	VXA_MASK,    PPCVEC2,	0,		{VD, VA, VB, VC}},
01917d
@@ -4918,7 +4943,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"dcbfep",	XRT(31,127,0),	XRT_MASK, E500MC|PPCA2, 0,		{RA0, RB}},
01917d
 
01917d
-{"setb",	X(31,128),    XRB_MASK|(3<<16), POWER9, 0,		{RT, BFA}},
01917d
+{"setb",	VX(31,256),  VXVB_MASK|(3<<16), POWER9,	0,		{RT, BFA}},
01917d
+{"setbool",	VX(31,257),  VXVB_MASK,         POWER9,	0,		{RT, BA}},
01917d
 
01917d
 {"wrtee",	X(31,131), XRARB_MASK, PPC403|BOOKE|PPCA2|PPC476, 0,	{RS}},
01917d
 
01917d
@@ -4968,6 +4994,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"prtyw",	X(31,154),    XRB_MASK, POWER6|PPCA2|PPC476, 0,		{RA, RS}},
01917d
 
01917d
+{"brw",		X(31,155),	XRB_MASK,    POWER9,	0,		{RA, RS}},
01917d
+
01917d
 {"stdepx",	X(31,157),	X_MASK,	  E500MC|PPCA2, 0,		{RS, RA0, RB}},
01917d
 
01917d
 {"stwepx",	X(31,159),	X_MASK,	  E500MC|PPCA2, 0,		{RS, RA0, RB}},
01917d
@@ -5005,6 +5033,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"prtyd",	X(31,186),	XRB_MASK, POWER6|PPCA2,	0,		{RA, RS}},
01917d
 
01917d
+{"brd",		X(31,187),	XRB_MASK,    POWER9,	0,		{RA, RS}},
01917d
+
01917d
 {"cmprb",	X(31,192),	XCMP_MASK,   POWER9,	0,		{BF, L, RA, RB}},
01917d
 
01917d
 {"icblq.",	XRC(31,198,1),	X_MASK,	     E6500,	0,		{CT, RA0, RB}},
01917d
@@ -5043,6 +5073,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"sleq",	XRC(31,217,0),	X_MASK,	     M601,	0,		{RA, RS, RB}},
01917d
 {"sleq.",	XRC(31,217,1),	X_MASK,	     M601,	0,		{RA, RS, RB}},
01917d
 
01917d
+{"brh",		X(31,219),	XRB_MASK,    POWER9,	0,		{RA, RS}},
01917d
+
01917d
 {"stbepx",	X(31,223),	X_MASK,	  E500MC|PPCA2, 0,		{RS, RA0, RB}},
01917d
 
01917d
 {"cmpeqb",	X(31,224),	XCMPL_MASK,  POWER9,	0,		{BF, RA, RB}},
01917d
@@ -6914,6 +6946,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"mffs",	XRC(63,583,0),	XRARB_MASK,  COM,	PPCEFS|PPCVLE,	{FRT}},
01917d
 {"mffs.",	XRC(63,583,1),	XRARB_MASK,  COM,	PPCEFS|PPCVLE,	{FRT}},
01917d
 
01917d
+{"mffsce",	XMMF(63,583,0,1), XMMF_MASK|RB_MASK, POWER9, PPCVLE,	{FRT}},
01917d
+{"mffscdrn",	XMMF(63,583,2,4), XMMF_MASK,         POWER9, PPCVLE,	{FRT, FRB}},
01917d
+{"mffscdrni",	XMMF(63,583,2,5), XMMF_MASK|(3<<14), POWER9, PPCVLE,	{FRT, DRM}},
01917d
+{"mffscrn",	XMMF(63,583,2,6), XMMF_MASK,         POWER9, PPCVLE,	{FRT, FRB}},
01917d
+{"mffscrni",	XMMF(63,583,2,7), XMMF_MASK|(7<<13), POWER9, PPCVLE,	{FRT, RM}},
01917d
+{"mffsl",	XMMF(63,583,3,0), XMMF_MASK|RB_MASK, POWER9, PPCVLE,	{FRT}},
01917d
+
01917d
 {"dcmpuq",	X(63,642),	X_MASK,	     POWER6,	PPCVLE,		{BF, FRAp, FRBp}},
01917d
 
01917d
 {"xscmpuqp",	X(63,644),	XBF_MASK,    PPCVSX3,	PPCVLE,		{BF, VA, VB}},