diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2015-01-16 12:19:21 +0100 |
---|---|---|
committer | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2015-01-16 12:28:58 +0100 |
commit | 1e2e8c529c1cf4fcc8cbae382aa0a653d0b65da6 (patch) | |
tree | 2cc295f864977f3b461a8f8fa80af608dcb8a769 /include | |
parent | 9f2850baa3ce341f0ba42bd9519cb3c1bf1287c7 (diff) | |
download | gdb-1e2e8c529c1cf4fcc8cbae382aa0a653d0b65da6.zip gdb-1e2e8c529c1cf4fcc8cbae382aa0a653d0b65da6.tar.gz gdb-1e2e8c529c1cf4fcc8cbae382aa0a653d0b65da6.tar.bz2 |
S/390: Add support for IBM z13.
- 32 128 bit vector registers (overlapping with the existing 16 64 bit
floating point registers)
- vector double instructions
- vector integer instructions
- scalar vector instructions (allowing to have more floating point
registers for scalar operations)
- vector string instructions
gas/ChangeLog:
* config/tc-s390.c (struct pd_reg): Remove.
(pre_defined_registers): Remove.
(REG_NAME_CNT): Remove.
(reg_name_search): Calculate the register number instead of doing
a lookup.
(register_name, tc_s390_regname_to_dw2regnum): Adopt to the new
reg_name_search signature.
(s390_parse_cpu): Support the new arch string z13.
(s390_insert_operand): Support for vector registers with the extra
field for the fifth bit of each vector register operand.
(md_gather_operand): Adjust to the new handling of optional
parameters.
* doc/as.texinfo: Document the z13 cpu string.
gas/testsuite/ChangeLog:
* gas/s390/esa-g5.d: Add a variant without the optional operand.
* gas/s390/esa-g5.s: Likewise.
* gas/s390/esa-z9-109.d: Likewise.
* gas/s390/esa-z9-109.s: Likewise.
* gas/s390/zarch-z9-109.d: Likewise.
* gas/s390/zarch-z9-109.s: Likewise.
* gas/s390/zarch-z10.d: For variants with a zero optional argument
it is not dumped by objdump anymore.
* gas/s390/zarch-zEC12.d: Likewise.
* gas/s390/zarch-z13.d: New file.
* gas/s390/zarch-z13.s: New file.
* gas/s390/s390.exp: Run the test for the z13 files.
include/opcode/ChangeLog:
* s390.h (s390_opcode_cpu_val): Add S390_OPCODE_Z13.
ld/testsuite/ChangeLog:
* ld-s390/tlsbin.dd: The nopr register operand is optional and not
printed if 0 anymore.
opcodes/ChangeLog:
* s390-dis.c (s390_extract_operand): Support vector register
operands.
(s390_print_insn_with_opcode): Support new operands types and add
new handling of optional operands.
* s390-mkopc.c (s390_opcode_mode_val, s390_opcode_cpu_val): Remove
and include opcode/s390.h instead.
(struct op_struct): New field `flags'.
(insertOpcode, insertExpandedMnemonic): New parameter `flags'.
(dumpTable): Dump flags.
(main): Parse flags from the s390-opc.txt file. Add z13 as cpu
string.
* s390-opc.c: Add new operands types, instruction formats, and
instruction masks.
(s390_opformats): Add new formats for .insn.
* s390-opc.txt: Add new instructions.
Diffstat (limited to 'include')
-rw-r--r-- | include/opcode/ChangeLog | 4 | ||||
-rw-r--r-- | include/opcode/s390.h | 23 |
2 files changed, 24 insertions, 3 deletions
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index a5e79f4..f97e56f 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,3 +1,7 @@ +2015-01-16 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + + * s390.h (s390_opcode_cpu_val): Add S390_OPCODE_Z13. + 2015-01-01 Alan Modra <amodra@gmail.com> Update year range in copyright notice of all files. diff --git a/include/opcode/s390.h b/include/opcode/s390.h index 79e9a60..b47709c 100644 --- a/include/opcode/s390.h +++ b/include/opcode/s390.h @@ -41,9 +41,13 @@ enum s390_opcode_cpu_val S390_OPCODE_Z10, S390_OPCODE_Z196, S390_OPCODE_ZEC12, + S390_OPCODE_Z13, S390_OPCODE_MAXCPU }; +/* Instruction specific flags. */ +#define S390_INSTR_FLAG_OPTPARM 0x1 + /* The opcode table is an array of struct s390_opcode. */ struct s390_opcode @@ -74,6 +78,9 @@ struct s390_opcode /* First cpu this opcode is available for. */ enum s390_opcode_cpu_val min_cpu; + + /* Instruction specific flags. */ + unsigned int flags; }; /* The table itself is sorted by major opcode number, and is otherwise @@ -86,7 +93,7 @@ extern const int s390_num_opcodes; extern const struct s390_opcode s390_opformats[]; extern const int s390_num_opformats; -/* Values defined for the flags field of a struct powerpc_opcode. */ +/* Values defined for the flags field of a struct s390_opcode. */ /* The operands table is an array of struct s390_operand. */ @@ -103,7 +110,7 @@ struct s390_operand }; /* Elements in the table are retrieved by indexing with values from - the operands field of the powerpc_opcodes table. */ + the operands field of the s390_opcodes table. */ extern const struct s390_operand s390_operands[]; @@ -151,4 +158,14 @@ extern const struct s390_operand s390_operands[]; /* The operand needs to be a valid GP or FP register pair. */ #define S390_OPERAND_REG_PAIR 0x800 - #endif /* S390_H */ +/* This operand names a vector register. The disassembler uses this + to print register names with a leading 'v'. */ +#define S390_OPERAND_VR 0x1000 + +#define S390_OPERAND_CP16 0x2000 + +#define S390_OPERAND_OR1 0x4000 +#define S390_OPERAND_OR2 0x8000 +#define S390_OPERAND_OR8 0x10000 + +#endif /* S390_H */ |