From af169f23335a1df5cf6e27b1f3087c18ae32e5a7 Mon Sep 17 00:00:00 2001 From: Martin Schwidefsky Date: Fri, 21 Mar 2003 13:28:09 +0000 Subject: * s390-dis.c (init_disasm): Rename S390_OPCODE_ESAME to S390_OPCODE_ZARCH. (print_insn_s390): Use new modes field of s390_opcodes. * s390-mkopc.c (ARCHBITS_ESAONLY, ARCHBITS_ESA, ARCHBITS_ESAME): Remove. (s390_opcode_mode_val, s390_opcode_cpu_val): New enums. (struct op_struct): Remove archbits. Add mode_bits and min_cpu. (insertOpcode): Replace archbits by min_cpu and mode_bits. (dumpTable): Write mode_bits and min_cpu instead of archbits. (main): Adapt to new format in s390-opcode.txt. * s390-opc.c (s390_opformats): Replace archbits by min_cpu and mode_bits. * s390-opc.txt: Replace archbits by min_cpu and mode_bits. --- opcodes/s390-mkopc.c | 87 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 25 deletions(-) (limited to 'opcodes/s390-mkopc.c') diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c index d79ff81..caa9993 100644 --- a/opcodes/s390-mkopc.c +++ b/opcodes/s390-mkopc.c @@ -23,21 +23,28 @@ #include #include -/* ARCHBITS_ESA and ARCH_ESAME correspond to the bit numbers defined - by s390_opcode_arch_val in include/opcode/s390.h: - ARCHBITS_ESAONLY = (1< op_array[ix].sort_value) @@ -98,7 +107,8 @@ insertOpcode (char *opcode, char *mnemonic, char *format, int archbits) strcpy(op_array[ix].format, format); op_array[ix].sort_value = sort_value; op_array[ix].no_nibbles = no_nibbles; - op_array[ix].archbits = archbits; + op_array[ix].min_cpu = min_cpu; + op_array[ix].mode_bits = mode_bits; no_ops++; } @@ -136,7 +146,8 @@ dumpTable (void) op_array[ix].no_nibbles*4, op_array[ix].opcode); printf ("MASK_%s, INSTR_%s, ", op_array[ix].format, op_array[ix].format); - printf ("%i}", op_array[ix].archbits); + printf ("%i, ", op_array[ix].mode_bits); + printf ("%i}", op_array[ix].min_cpu); if (ix < no_ops-1) printf (",\n"); else @@ -162,24 +173,50 @@ main (void) char mnemonic[16]; char format[16]; char description[64]; - char archtag[16]; - int archbits; + char cpu_string[16]; + char modes_string[16]; + int min_cpu; + int mode_bits; + char *str; if (currentLine[0] == '#') continue; memset (opcode, 0, 8); - if (sscanf (currentLine, "%15s %15s %15s \"%[^\"]\" %15s", - opcode, mnemonic, format, description, archtag) == 5) + if (sscanf (currentLine, "%15s %15s %15s \"%[^\"]\" %15s %15s", + opcode, mnemonic, format, description, + cpu_string, modes_string) == 6) { - if (strcmp (archtag, "esaonly") == 0) - archbits = ARCHBITS_ESAONLY; - else if (strcmp (archtag, "esa") == 0) - archbits = ARCHBITS_ESA; - else if (strcmp (archtag, "esame") == 0) - archbits = ARCHBITS_ESAME; - else - archbits = 0; - insertOpcode (opcode, mnemonic, format, archbits); + if (strcmp (cpu_string, "g5") == 0) + min_cpu = S390_OPCODE_G5; + else if (strcmp (cpu_string, "g6") == 0) + min_cpu = S390_OPCODE_G6; + else if (strcmp (cpu_string, "z900") == 0) + min_cpu = S390_OPCODE_Z900; + else { + fprintf (stderr, "Couldn't parse cpu string %s\n", cpu_string); + exit (1); + } + + str = modes_string; + mode_bits = 0; + do { + if (strncmp (str, "esa", 3) == 0 + && (str[3] == 0 || str[3] == ',')) { + mode_bits |= 1 << S390_OPCODE_ESA; + str += 3; + } else if (strncmp (str, "zarch", 5) == 0 + && (str[5] == 0 || str[5] == ',')) { + mode_bits |= 1 << S390_OPCODE_ZARCH; + str += 5; + } else { + fprintf (stderr, "Couldn't parse modes string %s\n", + modes_string); + exit (1); + } + if (*str == ',') + str++; + } while (*str != 0); + insertOpcode (opcode, mnemonic, format, min_cpu, mode_bits); } else fprintf (stderr, "Couldn't scan line %s\n", currentLine); -- cgit v1.1