ppc/svp64: share SVP64 context via libopcodes
[binutils-gdb.git] / include / opcode / ppc-svp64.h
1 /* ppc-svp64.h -- Header file for PowerPC opcode table (SVP64 extensions)
2 Copyright (C) 2022 Free Software Foundation, Inc.
3 Written by Dmitry Selyutin (ghostmansd).
4 Sponsored by NLnet and NGI POINTER under EU Grants 871528 and 957073.
5
6 This file is part of the GNU opcodes library.
7
8 This library is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 It is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this file; see the file COPYING. If not, write to the
20 Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
23 #ifndef PPC_SVP64_H
24 #define PPC_SVP64_H
25
26 #include "ppc-svp64-gen.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 struct svp64_extra_desc {
33 uint64_t (*get)(const struct svp64_insn *insn);
34 void (*set)(struct svp64_insn *insn, uint64_t value);
35 };
36
37 const struct svp64_extra_desc *
38 svp64_extra_desc (const struct svp64_desc *desc, ppc_opindex_t opindex);
39
40 struct svp64_ctx {
41 const struct svp64_desc *desc;
42 struct svp64_insn insn;
43 unsigned int pmmode : 1;
44 unsigned int pmask : 3;
45 unsigned int smmode : 1;
46 unsigned int smask : 3;
47 unsigned int mmode : 1;
48 unsigned int has_pmask : 1;
49 unsigned int has_smask : 1;
50 unsigned int mask_m_specified : 1;
51 unsigned int subvl : 2;
52 unsigned int destwid : 2;
53 unsigned int srcwid : 2;
54 unsigned int ldst_elstride : 1;
55 unsigned int sv_mode_explicit : 1;
56 unsigned int sv_mode : 2;
57 unsigned int sat : 1;
58 unsigned int src_zero : 1;
59 unsigned int dst_zero : 1;
60 unsigned int ff : 3 + 2; /* 3-bit plus RC1 */
61 unsigned int pr : 3 + 2; /* 3-bit plus RC1 */
62 unsigned int mr : 1;
63 unsigned int rg : 1;
64 unsigned int crm : 1;
65 unsigned int type : 2;
66 unsigned int rc : 1;
67 unsigned int mode : 5;
68
69 /* These are not implemented yet. */
70 unsigned int bc_all : 1;
71 unsigned int bc_lru : 1;
72 unsigned int bc_brc : 1;
73 unsigned int bc_svstep : 1;
74 unsigned int bc_vsb : 1;
75 unsigned int bc_vlset : 1;
76 unsigned int bc_vli : 1;
77 unsigned int bc_snz : 1;
78 };
79
80 #define SVP64_RC1_ACTIVE (1U << 3U)
81 #define SVP64_RC1_INVERT (SVP64_RC1_ACTIVE | (1U << 4U))
82
83 #ifdef __cplusplus
84 }
85 #endif
86
87 #endif /* PPC_SVP64_H */