OLD | NEW |
1 /* Definitions for opcode table for the sparc. | 1 /* Definitions for opcode table for the sparc. |
2 Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2002, | 2 Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2002, |
3 2003, 2005, 2010, 2011 Free Software Foundation, Inc. | 3 2003, 2005, 2010, 2011 Free Software Foundation, Inc. |
4 | 4 |
5 This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and | 5 This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and |
6 the GNU Binutils. | 6 the GNU Binutils. |
7 | 7 |
8 GAS/GDB is free software; you can redistribute it and/or modify | 8 GAS/GDB is free software; you can redistribute it and/or modify |
9 it under the terms of the GNU General Public License as published by | 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) | 10 the Free Software Foundation; either version 3, or (at your option) |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 /* Structure of an opcode table entry. */ | 92 /* Structure of an opcode table entry. */ |
93 | 93 |
94 typedef struct sparc_opcode | 94 typedef struct sparc_opcode |
95 { | 95 { |
96 const char *name; | 96 const char *name; |
97 unsigned long match; /* Bits that must be set. */ | 97 unsigned long match; /* Bits that must be set. */ |
98 unsigned long lose; /* Bits that must not be set. */ | 98 unsigned long lose; /* Bits that must not be set. */ |
99 const char *args; | 99 const char *args; |
100 /* This was called "delayed" in versions before the flags. */ | 100 /* This was called "delayed" in versions before the flags. */ |
101 unsigned int flags; | 101 unsigned int flags; |
| 102 unsigned int hwcaps; |
102 short architecture; /* Bitmask of sparc_opcode_arch_val's. */ | 103 short architecture; /* Bitmask of sparc_opcode_arch_val's. */ |
103 } sparc_opcode; | 104 } sparc_opcode; |
104 | 105 |
105 /* FIXME: Add F_ANACHRONISTIC flag for v9. */ | 106 /* FIXME: Add F_ANACHRONISTIC flag for v9. */ |
106 #define F_DELAYED 0x00000001 /* Delayed branch. */ | 107 #define F_DELAYED 0x00000001 /* Delayed branch. */ |
107 #define F_ALIAS 0x00000002 /* Alias for a "real" instruction. */ | 108 #define F_ALIAS 0x00000002 /* Alias for a "real" instruction. */ |
108 #define F_UNBR 0x00000004 /* Unconditional branch. */ | 109 #define F_UNBR 0x00000004 /* Unconditional branch. */ |
109 #define F_CONDBR 0x00000008 /* Conditional branch. */ | 110 #define F_CONDBR 0x00000008 /* Conditional branch. */ |
110 #define F_JSR 0x00000010 /* Subroutine call. */ | 111 #define F_JSR 0x00000010 /* Subroutine call. */ |
111 #define F_FLOAT 0x00000020 /* Floating point instruction (not a branch).
*/ | 112 #define F_FLOAT 0x00000020 /* Floating point instruction (not a branch).
*/ |
112 #define F_FBR 0x00000040 /* Floating point branch. */ | 113 #define F_FBR 0x00000040 /* Floating point branch. */ |
113 #define F_MUL32 0x00000100 /* umul/umulcc/smul/smulcc insns */ | |
114 #define F_DIV32 0x00000200 /* udiv/udivcc/sdiv/sdivcc insns */ | |
115 #define F_FSMULD 0x00000400 /* 'fsmuld' insn */ | |
116 #define F_V8PLUS 0x00000800 /* v9 insns available to 32bit */ | |
117 #define F_POPC 0x00001000 /* 'popc' insn */ | |
118 #define F_VIS 0x00002000 /* VIS insns */ | |
119 #define F_VIS2 0x00004000 /* VIS2 insns */ | |
120 #define F_ASI_BLK_INIT 0x00008000 /* block init ASIs */ | |
121 #define F_FMAF 0x00010000 /* fused multiply-add */ | |
122 #define F_VIS3 0x00020000 /* VIS3 insns */ | |
123 #define F_HPC 0x00040000 /* HPC insns */ | |
124 #define F_RANDOM 0x00080000 /* 'random' insn */ | |
125 #define F_TRANS 0x00100000 /* transaction insns */ | |
126 #define F_FJFMAU 0x00200000 /* unfused multiply-add */ | |
127 #define F_IMA 0x00400000 /* integer multiply-add */ | |
128 #define F_ASI_CACHE_SPARING \ | |
129 0x00800000 /* cache sparing ASIs */ | |
130 | 114 |
131 #define F_HWCAP_MASK» 0x00ffff00 | 115 /* These must match the HWCAP_* values precisely. */ |
| 116 #define HWCAP_MUL32» 0x00000001 /* umul/umulcc/smul/smulcc insns */ |
| 117 #define HWCAP_DIV32» 0x00000002 /* udiv/udivcc/sdiv/sdivcc insns */ |
| 118 #define HWCAP_FSMULD» 0x00000004 /* 'fsmuld' insn */ |
| 119 #define HWCAP_V8PLUS» 0x00000008 /* v9 insns available to 32bit */ |
| 120 #define HWCAP_POPC» 0x00000010 /* 'popc' insn */ |
| 121 #define HWCAP_VIS» 0x00000020 /* VIS insns */ |
| 122 #define HWCAP_VIS2» 0x00000040 /* VIS2 insns */ |
| 123 #define HWCAP_ASI_BLK_INIT» \ |
| 124 » » » 0x00000080 /* block init ASIs */ |
| 125 #define HWCAP_FMAF» 0x00000100 /* fused multiply-add */ |
| 126 #define HWCAP_VIS3» 0x00000400 /* VIS3 insns */ |
| 127 #define HWCAP_HPC» 0x00000800 /* HPC insns */ |
| 128 #define HWCAP_RANDOM» 0x00001000 /* 'random' insn */ |
| 129 #define HWCAP_TRANS» 0x00002000 /* transaction insns */ |
| 130 #define HWCAP_FJFMAU» 0x00004000 /* unfused multiply-add */ |
| 131 #define HWCAP_IMA» 0x00008000 /* integer multiply-add */ |
| 132 #define HWCAP_ASI_CACHE_SPARING \ |
| 133 » » » 0x00010000 /* cache sparing ASIs */ |
| 134 #define HWCAP_AES» 0x00020000 /* AES crypto insns */ |
| 135 #define HWCAP_DES» 0x00040000 /* DES crypto insns */ |
| 136 #define HWCAP_KASUMI» 0x00080000 /* KASUMI crypto insns */ |
| 137 #define HWCAP_CAMELLIA »0x00100000 /* CAMELLIA crypto insns */ |
| 138 #define HWCAP_MD5» 0x00200000 /* MD5 hashing insns */ |
| 139 #define HWCAP_SHA1» 0x00400000 /* SHA1 hashing insns */ |
| 140 #define HWCAP_SHA256» 0x00800000 /* SHA256 hashing insns */ |
| 141 #define HWCAP_SHA512» 0x01000000 /* SHA512 hashing insns */ |
| 142 #define HWCAP_MPMUL» 0x02000000 /* Multiple Precision Multiply */ |
| 143 #define HWCAP_MONT» 0x04000000 /* Montgomery Mult/Sqrt */ |
| 144 #define HWCAP_PAUSE» 0x08000000 /* Pause insn */ |
| 145 #define HWCAP_CBCOND» 0x10000000 /* Compare and Branch insns */ |
| 146 #define HWCAP_CRC32C» 0x20000000 /* CRC32C insn */ |
132 | 147 |
133 /* All sparc opcodes are 32 bits, except for the `set' instruction (really a | 148 /* All sparc opcodes are 32 bits, except for the `set' instruction (really a |
134 macro), which is 64 bits. It is handled as a special case. | 149 macro), which is 64 bits. It is handled as a special case. |
135 | 150 |
136 The match component is a mask saying which bits must match a particular | 151 The match component is a mask saying which bits must match a particular |
137 opcode in order for an instruction to be an instance of that opcode. | 152 opcode in order for an instruction to be an instance of that opcode. |
138 | 153 |
139 The args component is a string containing one character for each operand of t
he | 154 The args component is a string containing one character for each operand of t
he |
140 instruction. | 155 instruction. |
141 | 156 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 7 %fcc1. (v9) | 216 7 %fcc1. (v9) |
202 8 %fcc2. (v9) | 217 8 %fcc2. (v9) |
203 9 %fcc3. (v9) | 218 9 %fcc3. (v9) |
204 ! Privileged Register in rd (v9) | 219 ! Privileged Register in rd (v9) |
205 ? Privileged Register in rs1 (v9) | 220 ? Privileged Register in rs1 (v9) |
206 * Prefetch function constant. (v9) | 221 * Prefetch function constant. (v9) |
207 x OPF field (v9 impdep). | 222 x OPF field (v9 impdep). |
208 0 32/64 bit immediate for set or setx (v9) insns | 223 0 32/64 bit immediate for set or setx (v9) insns |
209 _ Ancillary state register in rd (v9a) | 224 _ Ancillary state register in rd (v9a) |
210 / Ancillary state register in rs1 (v9a) | 225 / Ancillary state register in rs1 (v9a) |
211 » (» entire floating point state register (%efsr). */ | 226 » (» entire floating point state register (%efsr) |
| 227 » )» 5 bit immediate placed in RS3 field |
| 228 » =» 2+8 bit PC relative immediate. (v9) */ |
212 | 229 |
213 #define OP2(x) (((x) & 0x7) << 22) /* Op2 field of format2 insns. */ | 230 #define OP2(x) (((x) & 0x7) << 22) /* Op2 field of format2 insns. */ |
214 #define OP3(x) (((x) & 0x3f) << 19) /* Op3 field of format3 insns. */ | 231 #define OP3(x) (((x) & 0x3f) << 19) /* Op3 field of format3 insns. */ |
215 #define OP(x) ((unsigned) ((x) & 0x3) << 30) /* Op field of all insns.
*/ | 232 #define OP(x) ((unsigned) ((x) & 0x3) << 30) /* Op field of all insns.
*/ |
216 #define OPF(x) (((x) & 0x1ff) << 5) /* Opf field of float insns. */ | 233 #define OPF(x) (((x) & 0x1ff) << 5) /* Opf field of float insns. */ |
217 #define OPF_LOW5(x) OPF ((x) & 0x1f) /* V9. */ | 234 #define OPF_LOW5(x) OPF ((x) & 0x1f) /* V9. */ |
218 #define OPF_LOW4(x) OPF ((x) & 0xf) /* V9. */ | 235 #define OPF_LOW4(x) OPF ((x) & 0xf) /* V9. */ |
219 #define F3F(x, y, z) (OP (x) | OP3 (y) | OPF (z)) /* Format3 float insns. */ | 236 #define F3F(x, y, z) (OP (x) | OP3 (y) | OPF (z)) /* Format3 float insns. */ |
220 #define F3I(x) (((x) & 0x1) << 13) /* Immediate field of format 3 insn
s. */ | 237 #define F3I(x) (((x) & 0x1) << 13) /* Immediate field of format 3 insn
s. */ |
221 #define F2(x, y) (OP (x) | OP2(y)) /* Format 2 insns. */ | 238 #define F2(x, y) (OP (x) | OP2(y)) /* Format 2 insns. */ |
(...skipping 27 matching lines...) Expand all Loading... |
249 extern int sparc_encode_prefetch (const char *); | 266 extern int sparc_encode_prefetch (const char *); |
250 extern const char *sparc_decode_prefetch (int); | 267 extern const char *sparc_decode_prefetch (int); |
251 extern int sparc_encode_sparclet_cpreg (const char *); | 268 extern int sparc_encode_sparclet_cpreg (const char *); |
252 extern const char *sparc_decode_sparclet_cpreg (int); | 269 extern const char *sparc_decode_sparclet_cpreg (int); |
253 | 270 |
254 /* Local Variables: | 271 /* Local Variables: |
255 fill-column: 131 | 272 fill-column: 131 |
256 comment-column: 0 | 273 comment-column: 0 |
257 End: */ | 274 End: */ |
258 | 275 |
OLD | NEW |