From aa3c112fab5db4a90703442f65b743857e50d2ac Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 11 May 2020 09:40:42 +0930 Subject: Power10 Reduced precision outer product operations include/ * opcode/ppc.h (PPC_OPERAND_ACC): Define. Renumber following PPC_OPERAND defines. opcodes/ * ppc-opc.c (insert_xa6a, extract_xa6a, insert_xb6a, extract_xb6a): New functions. (powerpc_operands): Define ACC, PMSK8, PMSK4, PMSK2, XMSK, YMSK, YMSK2, XA6a, XA6ap, XB6a entries. (PMMIRR, P_X_MASK, P_XX1_MASK, P_GER_MASK): Define (P_GER2_MASK, P_GER4_MASK, P_GER8_MASK, P_GER64_MASK): Define. (PPCVSX4): Define. (powerpc_opcodes): Add xxmfacc, xxmtacc, xxsetaccz, xvi8ger4pp, xvi8ger4, xvf16ger2pp, xvf16ger2, xvf32gerpp, xvf32ger, xvi4ger8pp, xvi4ger8, xvi16ger2spp, xvi16ger2s, xvbf16ger2pp, xvbf16ger2, xvf64gerpp, xvf64ger, xvi16ger2, xvf16ger2np, xvf32gernp, xvi8ger4spp, xvi16ger2pp, xvbf16ger2np, xvf64gernp, xvf16ger2pn, xvf32gerpn, xvbf16ger2pn, xvf64gerpn, xvf16ger2nn, xvf32gernn, xvbf16ger2nn, xvf64gernn, xvcvbf16sp, xvcvspbf16. (prefix_opcodes): Add pmxvi8ger4pp, pmxvi8ger4, pmxvf16ger2pp, pmxvf16ger2, pmxvf32gerpp, pmxvf32ger, pmxvi4ger8pp, pmxvi4ger8, pmxvi16ger2spp, pmxvi16ger2s, pmxvbf16ger2pp, pmxvbf16ger2, pmxvf64gerpp, pmxvf64ger, pmxvi16ger2, pmxvf16ger2np, pmxvf32gernp, pmxvi8ger4spp, pmxvi16ger2pp, pmxvbf16ger2np, pmxvf64gernp, pmxvf16ger2pn, pmxvf32gerpn, pmxvbf16ger2pn, pmxvf64gerpn, pmxvf16ger2nn, pmxvf32gernn, pmxvbf16ger2nn, pmxvf64gernn. gas/ * config/tc-ppc.c (pre_defined_registers): Add accumulators. (md_assemble): Check acc specified in correct operand. * testsuite/gas/ppc/outerprod.d, * testsuite/gas/ppc/outerprod.s, * testsuite/gas/ppc/vsx4.d, * testsuite/gas/ppc/vsx4.s: New tests. * testsuite/gas/ppc/ppc.exp: Run them. --- gas/config/tc-ppc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'gas/config/tc-ppc.c') diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index e0da3bf..4a07f0b 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -346,6 +346,16 @@ struct pd_reg static const struct pd_reg pre_defined_registers[] = { + /* VSX accumulators. */ + { "a0", 0, PPC_OPERAND_ACC }, + { "a1", 1, PPC_OPERAND_ACC }, + { "a2", 2, PPC_OPERAND_ACC }, + { "a3", 3, PPC_OPERAND_ACC }, + { "a4", 4, PPC_OPERAND_ACC }, + { "a5", 5, PPC_OPERAND_ACC }, + { "a6", 6, PPC_OPERAND_ACC }, + { "a7", 7, PPC_OPERAND_ACC }, + /* Condition Registers */ { "cr.0", 0, PPC_OPERAND_CR_REG }, { "cr.1", 1, PPC_OPERAND_CR_REG }, @@ -3569,7 +3579,7 @@ md_assemble (char *str) & ~operand->flags & (PPC_OPERAND_GPR | PPC_OPERAND_FPR | PPC_OPERAND_VR | PPC_OPERAND_VSR | PPC_OPERAND_CR_BIT | PPC_OPERAND_CR_REG - | PPC_OPERAND_SPR | PPC_OPERAND_GQR)) != 0 + | PPC_OPERAND_SPR | PPC_OPERAND_GQR | PPC_OPERAND_ACC)) != 0 && !((ex.X_md & PPC_OPERAND_GPR) != 0 && ex.X_add_number != 0 && (operand->flags & PPC_OPERAND_GPR_0) != 0)) -- cgit v1.1