diff options
author | Alan Modra <amodra@gmail.com> | 2020-05-11 09:40:42 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-05-11 21:08:37 +0930 |
commit | aa3c112fab5db4a90703442f65b743857e50d2ac (patch) | |
tree | 25c6c8d45ee9365ebe6865536d56d8680bf93c90 /gas/config/tc-ppc.c | |
parent | 6edbfd3beb15105dfe5c59ee3b22e3daefaea509 (diff) | |
download | gdb-aa3c112fab5db4a90703442f65b743857e50d2ac.zip gdb-aa3c112fab5db4a90703442f65b743857e50d2ac.tar.gz gdb-aa3c112fab5db4a90703442f65b743857e50d2ac.tar.bz2 |
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.
Diffstat (limited to 'gas/config/tc-ppc.c')
-rw-r--r-- | gas/config/tc-ppc.c | 12 |
1 files changed, 11 insertions, 1 deletions
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)) |