Fix various assembler testsuite failures for the Z80 target.
authorSergey Belyashov <sergey.belyashov@gmail.com>
Tue, 14 Jan 2020 13:13:57 +0000 (13:13 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 14 Jan 2020 13:13:57 +0000 (13:13 +0000)
PR 25377
gas * config/tc-z80.c: Add support for half precision, single
precision and double precision floating point values.
* config/tc-z80.h b/gas/config/tc-z80.h: Disable string escapes.
* doc/as.texi: Add new z80 command line options.
* doc/c-z80.texi: Document new z80 command line options.
* testsuite/gas/z80/ez80_pref_dis.s: New test.
* testsuite/gas/z80/ez80_pref_dis.d: New test driver.
* testsuite/gas/z80/z80.exp: Run the new test.
* testsuite/gas/z80/fp_math48.d: Use correct command line option.
* testsuite/gas/z80/fp_zeda32.d: Likewise.
* testsuite/gas/z80/strings.d: Update expected output.

opcodes * z80-dis.c (suffix): Use .db instruction to generate double
prefix.

13 files changed:
gas/ChangeLog
gas/config/tc-z80.c
gas/config/tc-z80.h
gas/doc/as.texi
gas/doc/c-z80.texi
gas/testsuite/gas/z80/ez80_pref_dis.d [new file with mode: 0644]
gas/testsuite/gas/z80/ez80_pref_dis.s [new file with mode: 0644]
gas/testsuite/gas/z80/fp_math48.d
gas/testsuite/gas/z80/fp_zeda32.d
gas/testsuite/gas/z80/strings.d
gas/testsuite/gas/z80/z80.exp
opcodes/ChangeLog
opcodes/z80-dis.c

index 184af58abc1db9c0114408968a725350d07af1d6..07cb331d084f6e272c260286fec33a893b9e1bd3 100644 (file)
@@ -1,3 +1,18 @@
+2020-01-14  Sergey Belyashov  <sergey.belyashov@gmail.com>
+
+       PR 25377
+       * config/tc-z80.c: Add support for half precision, single
+       precision and double precision floating point values.
+       * config/tc-z80.h b/gas/config/tc-z80.h: Disable string escapes.
+       * doc/as.texi: Add new z80 command line options.
+       * doc/c-z80.texi: Document new z80 command line options.
+       * testsuite/gas/z80/ez80_pref_dis.s: New test.
+       * testsuite/gas/z80/ez80_pref_dis.d: New test driver.
+       * testsuite/gas/z80/z80.exp: Run the new test.
+       * testsuite/gas/z80/fp_math48.d: Use correct command line option.
+       * testsuite/gas/z80/fp_zeda32.d: Likewise.
+       * testsuite/gas/z80/strings.d: Update expected output.
+
 2020-01-13  Matthew Malcomson  <matthew.malcomson@arm.com>
 
        * config/tc-aarch64.c (f64mm, f32mm): Add sve as a feature
index 28b0f2b3f528c7c5133f5b34f9edd009fa1770cb..d823549ff0940de5720d8aa1d09349d41337492a 100644 (file)
 #include "safe-ctype.h"
 #include "subsegs.h"
 #include "elf/z80.h"
+#include "dwarf2dbg.h"
 
 /* Exported constants.  */
 const char comment_chars[] = ";\0";
 const char line_comment_chars[] = "#;\0";
 const char line_separator_chars[] = "\0";
 const char EXP_CHARS[] = "eE\0";
-const char FLT_CHARS[] = "RrFf\0";
+const char FLT_CHARS[] = "RrDdFfSsHh\0";
 
 /* For machine specific options.  */
 const char * md_shortopts = ""; /* None yet.  */
@@ -50,8 +51,8 @@ enum options
   OPTION_MACH_IUP,
   OPTION_MACH_WUP,
   OPTION_MACH_FUP,
-  OPTION_FLOAT_FORMAT,
-  OPTION_DOUBLE_FORMAT,
+  OPTION_FP_SINGLE_FORMAT,
+  OPTION_FP_DOUBLE_FORMAT,
   OPTION_COMPAT_LL_PREFIX,
   OPTION_COMPAT_COLONLESS,
   OPTION_COMPAT_SDCC
@@ -84,8 +85,8 @@ struct option md_longopts[] =
   { "z180",      no_argument, NULL, OPTION_MACH_Z180},
   { "ez80",      no_argument, NULL, OPTION_MACH_EZ80_Z80},
   { "ez80-adl",  no_argument, NULL, OPTION_MACH_EZ80_ADL},
-  { "float",     required_argument, NULL, OPTION_FLOAT_FORMAT},
-  { "double",    required_argument, NULL, OPTION_DOUBLE_FORMAT},
+  { "fp-s",      required_argument, NULL, OPTION_FP_SINGLE_FORMAT},
+  { "fp-d",      required_argument, NULL, OPTION_FP_DOUBLE_FORMAT},
   { "strict",    no_argument, NULL, OPTION_MACH_FUD},
   { "full",      no_argument, NULL, OPTION_MACH_IUP},
   { "with-inst", required_argument, NULL, OPTION_MACH_INST},
@@ -164,6 +165,12 @@ static const char *
 str_to_zeda32 (char *litP, int *sizeP);
 static const char *
 str_to_float48 (char *litP, int *sizeP);
+static const char *
+str_to_ieee754_h (char *litP, int *sizeP);
+static const char *
+str_to_ieee754_s (char *litP, int *sizeP);
+static const char *
+str_to_ieee754_d (char *litP, int *sizeP);
 
 static str_to_float_t
 get_str_to_float (const char *arg)
@@ -174,7 +181,16 @@ get_str_to_float (const char *arg)
   if (strcasecmp (arg, "math48") == 0)
     return str_to_float48;
 
-  if (strcasecmp (arg, "ieee754") != 0)
+  if (strcasecmp (arg, "half") != 0)
+    return str_to_ieee754_h;
+
+  if (strcasecmp (arg, "single") != 0)
+    return str_to_ieee754_s;
+
+  if (strcasecmp (arg, "double") != 0)
+    return str_to_ieee754_d;
+
+  if (strcasecmp (arg, "ieee754") == 0)
     as_fatal (_("invalid floating point numbers type `%s'"), arg);
   return NULL;
 }
@@ -248,10 +264,10 @@ md_parse_option (int c, const char* arg)
       ins_ok = INS_GBZ80;
       ins_err = INS_UNDOC | INS_UNPORT;
       break;
-    case OPTION_FLOAT_FORMAT:
+    case OPTION_FP_SINGLE_FORMAT:
       str_to_float = get_str_to_float (arg);
       break;
-    case OPTION_DOUBLE_FORMAT:
+    case OPTION_FP_DOUBLE_FORMAT:
       str_to_double = get_str_to_float (arg);
       break;
     case OPTION_MACH_INST:
@@ -319,11 +335,14 @@ Compatibility options:\n\
   -local-prefix=TEXT\t  treat labels prefixed by TEXT as local\n\
   -colonless\t\t  permit colonless labels\n\
   -sdcc\t\t\t  accept SDCC specific instruction syntax\n\
-  -float=FORMAT\t\t  set floating point numbers format\n\
-  -double=FORMAT\t\t  set floating point numbers format\n\
+  -fp-s=FORMAT\t\t  set single precission FP numbers format\n\
+  -fp-d=FORMAT\t\t  set double precission FP numbers format\n\
 Where FORMAT one of:\n\
   ieee754\t\t  IEEE754 compatible\n\
-  zeda32\t\t\t  Zeda z80float library 32 bit format\n\
+  half\t\t\t  IEEE754 half precision (16 bit)\n\
+  single\t\t  IEEE754 single precision (32 bit)\n\
+  double\t\t  IEEE754 double precision (64 bit)\n\
+  zeda32\t\t  Zeda z80float library 32 bit format\n\
   math48\t\t  48 bit format from Math48 library\n\
 \n\
 Support for known undocumented instructions:\n\
@@ -649,13 +668,17 @@ md_atof (int type, char *litP, int *sizeP)
     {
     case 'f':
     case 'F':
+    case 's':
+    case 'S':
       if (str_to_float)
-        return str_to_float (litP, sizeP);
+       return str_to_float (litP, sizeP);
       break;
     case 'd':
     case 'D':
+    case 'r':
+    case 'R':
       if (str_to_double)
-        return str_to_double (litP, sizeP);
+       return str_to_double (litP, sizeP);
       break;
     }
   return ieee_md_atof (type, litP, sizeP, FALSE);
@@ -3255,6 +3278,7 @@ md_assemble (char *str)
     }
   else
     {
+      dwarf2_emit_insn (0);
       if ((*p) && (!ISSPACE (*p)))
         {
           if (*p != '.' || !(ins_ok & INS_EZ80) || !assemble_suffix (&p))
@@ -3670,3 +3694,21 @@ str_to_float48(char *litP, int *sizeP)
     *litP++ = (char)(mantissa >> i);
   return NULL;
 }
+
+static const char *
+str_to_ieee754_h(char *litP, int *sizeP)
+{
+  return ieee_md_atof ('h', litP, sizeP, FALSE);
+}
+
+static const char *
+str_to_ieee754_s(char *litP, int *sizeP)
+{
+  return ieee_md_atof ('s', litP, sizeP, FALSE);
+}
+
+static const char *
+str_to_ieee754_d(char *litP, int *sizeP)
+{
+  return ieee_md_atof ('d', litP, sizeP, FALSE);
+}
index ae98d5d4d33d656aad79ccf3fa6304554032b443..57490270913bb178b0cde066a1fad66ec18380b8 100644 (file)
@@ -96,7 +96,6 @@ extern void z80_cons_fix_new (fragS *, int, int, expressionS *);
 /* We allow single quotes to delimit character constants as
    well, but it is cleaner to handle that in tc-z80.c.  */
 #define SINGLE_QUOTE_STRINGS
-#define TC_STRING_ESCAPES 0
 
 /* An `.lcomm' directive with no explicit alignment parameter will
    use this macro to set P2VAR to the alignment that a request for
index ab661a73dbe4087a367aa8ec65e719f9670e39e8..fa1550961599ac6801b11de1c0cb092ea61b054d 100644 (file)
@@ -631,6 +631,11 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
 
 @emph{Target Z80 options:}
   [@b{-z80}]|[@b{-z180}]|[@b{-r800}]|[@b{-ez80}]|[@b{-ez80-adl}]
+  [@b{-local-prefix=}@var{PREFIX}]
+  [@b{-colonless}]
+  [@b{-sdcc}]
+  [@b{-fp-s=}@var{FORMAT}]
+  [@b{-fp-d=}@var{FORMAT}]
   [@b{-strict}]|[@b{-full}]
   [@b{-with-inst=@var{INST}[,...]}] [@b{-Wnins @var{INST}[,...]}]
   [@b{-without-inst=@var{INST}[,...]}] [@b{-Fins @var{INST}[,...]}]
@@ -1940,78 +1945,24 @@ Xtensa processor.
 
 @end ifset
 
-@c man begin OPTIONS
-
 @ifset Z80
-The following options are available when @value{AS} is configured for
-a Z80 family processor.
-@table @gcctabopt
 
-@item -z80
-Assemble for Z80 processor.
-@item -r800
-Assemble for R800 processor.
-@item -z180
-Assemble for Z180 processor.
-@item -ez80
-Assemble for eZ80 processor in Z80 memory mode by default.
-@item -ez80-adl
-Assemble for eZ80 processor in ADL memory mode by default.
-
-@item  @code{-colonless}
-Accept colonless labels. All names at line begin are treated as labels.
-@item  @code{-sdcc}
-Accept assembler code produces by SDCC.
-
-@item  @code{-strict}
-Accept documented instructions only.
-@item  @code{-full}
-Accept all known Z80 instructions.
-@item  @code{-with-inst=INST[,...]}
-@itemx @code{-Wnins INST[,...]}
-Enable specified undocumented instruction(s).
-@item  @code{-without-inst=INST[,...]}
-@itemx @code{-Fins INST[,...]}
-Disable specified undocumented instruction(s).
-
-@item  -ignore-undocumented-instructions
-@itemx -Wnud
-Assemble undocumented Z80 instructions that also work on R800 without warning.
-@item  -ignore-unportable-instructions
-@itemx -Wnup
-Assemble all undocumented Z80 instructions without warning.
-@item  -warn-undocumented-instructions
-@itemx -Wud
-Issue a warning for undocumented Z80 instructions that also work on R800.
-@item  -warn-unportable-instructions
-@itemx -Wup
-Issue a warning for undocumented Z80 instructions that do not work on R800.
-@item  -forbid-undocumented-instructions
-@itemx -Fud
-Treat all undocumented instructions as errors.
-@item  -forbid-unportable-instructions
-@itemx -Fup
-Treat undocumented Z80 instructions that do not work on R800 as errors.
-@end table
+@ifclear man
+@xref{Z80 Options}, for the options available when @value{AS} is configured
+for an Z80 processor.
+@end ifclear
 
-Folowing undocumented instructions may be enabled/disabled by
-@code{-with-inst}/@code{-without-inst}:
-@table @gcctabopt
-@item  @code{idx-reg-halves}
-All operations with halves of index registers (IXL, IXH, IYL, IYH).
-@item  @code{sli}
-SLI or SLL instruction.
-@item  @code{op-ii-ld}
-Istructions like @code{<op> (<ii>+<d>),<r>}, where @code{<op>}
-is shift or bit manipulation instruction (RLC, SLA, SET, RES...).
-@item @code{in-f-c}
-Instruction @code{IN F,(C)}.
-@item @code{out-c-0}
-Instruction @code{OUT (C),0}
-@end table
+@ifset man
+@c man begin OPTIONS
+The following options are available when @value{AS} is configured for an
+Z80 processor.
+@c man end
+@c man begin INCLUDE
+@include c-z80.texi
+@c ended inside the included file
 @end ifset
 
-@c man end
+@end ifset
 
 @menu
 * Manual::                      Structure of this Manual
index a4366464046adc32d3c0a4b73d4bab43b840c035..dd6332d670eb78ffb2088e2518c40e664c1b190d 100644 (file)
 @end menu
 
 @node Z80 Options
-@section Options
+@section Command-line Options
 @cindex Z80 options
 @cindex options for Z80
-@table @option
+@c man begin OPTIONS
+@table @gcctabopt
 @cindex @code{-z80} command-line option, Z80
 @item -z80
 Produce code for the Z80 processor. By default accepted undocumented
-operations with halves of index registers (IXL, IXH, IYL, IYH) and
-instuction IN F,(C). Other useful undocumented instructions produces
+operations with halves of index registers (@code{IXL}, @code{IXH}, @code{IYL}, @code{IYH}) and
+instuction @code{IN F,(C)}. Other useful undocumented instructions produces
 warnings. Undocumented instructions may not work on some CPUs, use
 them on your own risk.
 
-@cindex @code{-r800} command-line option, R800
+@cindex @code{-r800} command-line option, Z80
 @item -r800
 Produce code for the R800 processor.
 
-@cindex @code{-z180} command-line option, Z180
+@cindex @code{-z180} command-line option, Z80
 @item -z180
 Produce code for the Z180 processor.
 
-@cindex @code{-ez80} command-line option, eZ80
+@cindex @code{-ez80} command-line option, Z80
 @item -ez80
 Produce code for the eZ80 processor in Z80 memory mode by default.
 
-@cindex @code{-ez80-adl} command-line option, eZ80
+@cindex @code{-ez80-adl} command-line option, Z80
 @item -ez80-adl
 Produce code for the eZ80 processor in ADL memory mode by default.
 
-@cindex Compatibility options
-@item  @code{-colonless}
+@cindex @code{-local-prefix} command-line option, Z80
+@item  -local-prefix=@var{prefix}
+Mark all labels with specified prefix as local. But such label can be
+marked global explicitly in the code. This option do not change default
+local label prefix @code{.L}, it is just adds new one.
+
+@cindex @code{-colonless} command-line option, Z80
+@item  -colonless
 Accept colonless labels. All names at line begin are treated as labels.
 
-@item  @code{-sdcc}
-Accept assembler code produces by SDCC.
+@cindex @code{-sdcc} command-line option, Z80
+@item  -sdcc
+Accept assembler code produced by SDCC.
+
+@cindex @code{-fp-s} command-line option, Z80
+@item -fp-s=@var{FORMAT}
+Single precision floating point numbers format. Default: ieee754 (32 bit).
 
-@cindex Undocumented instruction control
-@item  @code{-strict}
+@cindex @code{-fp-d} command-line option, Z80
+@item -fp-d=@var{FORMAT}
+Double precision floating point numbers format. Default: ieee754 (64 bit).
+
+@cindex @code{-strict} command-line option, Z80
+@item  -strict
 Accept documented instructions only.
 
-@item  @code{-full}
+@cindex @code{-full} command-line option, Z80
+@item  -full
 Accept all known Z80 instructions.
 
-@item  @code{-with-inst=INST[,...]}
-@itemx @code{-Wnins INST[,...]}
+@item  -with-inst=@var{INST}[,...]
+@itemx -Wnins @var{INST}[,...]
 Enable specified undocumented instruction(s).
 
-@item  @code{-without-inst=INST[,...]}
-@itemx @code{-Fins INST[,...]}
+@item  -without-inst=@var{INST}[,...]
+@itemx -Fins @var{INST}[,...]
 Disable specified undocumented instruction(s).
 
-@cindex Obsolete options
-@item  @code{-ignore-undocumented-instructions}
-@itemx @code{-Wnud}
+@item  -ignore-undocumented-instructions
+@itemx -Wnud
 Silently assemble undocumented Z80-instructions that have been adopted
 as documented R800-instructions .
-@item  @code{-ignore-unportable-instructions}
-@itemx @code{-Wnup}
+@item  -ignore-unportable-instructions
+@itemx -Wnup
 Silently assemble all undocumented Z80-instructions.
-@item  @code{-warn-undocumented-instructions}
-@itemx @code{-Wud}
+@item  -warn-undocumented-instructions
+@itemx -Wud
 Issue warnings for undocumented Z80-instructions that work on R800, do
 not assemble other undocumented instructions without warning.
-@item  @code{-warn-unportable-instructions}
-@itemx @code{-Wup}
+@item  -warn-unportable-instructions
+@itemx -Wup
 Issue warnings for other undocumented Z80-instructions, do not treat any
 undocumented instructions as errors.
-@item  @code{-forbid-undocumented-instructions}
-@itemx @code{-Fud}
+@item  -forbid-undocumented-instructions
+@itemx -Fud
 Treat all undocumented z80-instructions as errors.
 @item  -forbid-unportable-instructions
-@itemx @code{-Fup}
+@itemx -Fup
 Treat undocumented z80-instructions that do not work on R800 as errors.
 @end table
+@c man end
+
+Floating point numbers formats.
+@table @option
+@item @code{ieee754}
+Single or double precision IEEE754 compatible format.
+
+@item @code{half}
+Half precision IEEE754 compatible format (16 bits).
+
+@item @code{single}
+Single precision IEEE754 compatible format (32 bits).
+
+@item @code{double}
+Double precision IEEE754 compatible format (64 bits).
+
+@item @code{zeda32}
+32 bit floating point format from z80float library by Zeda.
+
+@item @code{math48}
+48 bit floating point format from Math48 package by Anders Hejlsberg.
+@end table
 
 Known undocumented instructions.
 @table @option
 @cindex Known undocumented instructions
 @item  @code{idx-reg-halves}
-All operations with halves of index registers (IXL, IXH, IYL, IYH).
+All operations with halves of index registers (@code{IXL}, @code{IXH}, @code{IYL}, @code{IYH}).
 @item  @code{sli}
-SLI or SLL instruction. Same as @code{SLA r; INC r}.
+@code{SLI} or @code{SLL} instruction. Same as @code{SLA r; INC r}.
 @item  @code{op-ii-ld}
 Istructions like @code{<op> (<ii>+<d>),<r>}. For example: @code{RL (IX+5),C}
 @item @code{in-f-c}
@@ -132,6 +170,7 @@ The suffix @samp{b} denotes a backreference to local label.
 * Z80-Chars::                Special Characters
 * Z80-Regs::                 Register Names
 * Z80-Case::                 Case Sensitivity
+* Z80-Labels::               Labels
 @end menu
 
 @node Z80-Chars
@@ -191,11 +230,35 @@ The case of letters is significant in labels and symbol names. The case
 is also important to distinguish the suffix @samp{b} for a backward reference
 to a local label from the suffix @samp{B} for a number in binary notation.
 
+@node Z80-Labels
+@subsection Labels
+
+@cindex labels, Z80
+@cindex Z80 labels
+Labels started by @code{.L} acts as local labels. You may specify custom local
+label prefix by @code{-local-prefix} command-line option.
+Dollar, forward and backward local labels are supported. By default, all labels
+are followed by colon.
+Legacy code with colonless labels can be built with @code{-colonless}
+command-line option specified. In this case all tokens at line begin are treated
+as labels.
+
 @node Z80 Floating Point
 @section Floating Point
 @cindex floating point, Z80
 @cindex Z80 floating point
-Floating-point numbers are not supported.
+Floating-point numbers of following types are supported:
+
+@table @option
+@item @code{ieee754}
+Supported half, single and double precision IEEE754 compatible numbers.
+
+@item @code{zeda32}
+32 bit floating point numbers from z80float library by Zeda.
+
+@item @code{math48}
+48 bit floating point numbers from Math48 package by Anders Hejlsberg.
+@end table
 
 @node Z80 Directives
 @section Z80 Assembler Directives
@@ -208,15 +271,19 @@ These are the additional directives in @code{@value{AS}} for the Z80:
 
 @table @code
 @item assume @var{ADL}@samp{=}@var{expression}
-Set ADL status for eZ80. Non-null value enable compilation ADL mode else
+Set ADL status for eZ80. Non-zero value enable compilation in ADL mode else
 used Z80 mode. ADL and Z80 mode produces incompatible object code. Mixing
 both of them within one binary may lead problems with disassembler.
 
 @item db @var{expression}|@var{string}[,@var{expression}|@var{string}...]
 @itemx defb @var{expression}|@var{string}[,@var{expression}|@var{string}...]
+@itemx defm @var{string}...]
 For each @var{string} the characters are copied to the object file, for
 each other @var{expression} the value is stored in one byte.
 A warning is issued in case of an overflow.
+Backslash symbol in the strings is generic symbol, it cannot be used as
+escape character (for this purpose use @code{.ascii} or @code{.asciiz}
+directives).
 
 @item dw @var{expression}[,@var{expression}...]
 @itemx defw @var{expression}[,@var{expression}...]
@@ -289,7 +356,7 @@ The assembler also supports the following undocumented Z80-instructions,
 that have not been adopted in any other instruction set:
 @table @code
 @item out (c),0
-Sends zero to the port pointed to by register c.
+Sends zero to the port pointed to by register @code{C}.
 
 @item sli @var{m}
 Equivalent to @code{@var{m} = (@var{m}<<1)+1}, the operand @var{m} can
diff --git a/gas/testsuite/gas/z80/ez80_pref_dis.d b/gas/testsuite/gas/z80/ez80_pref_dis.d
new file mode 100644 (file)
index 0000000..d76e43f
--- /dev/null
@@ -0,0 +1,34 @@
+#name: multiple eZ80 opcode prefixes
+#as: -ez80
+#objdump: -d
+
+.*:[     ]+file format (coff)|(elf32)\-z80
+
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+[   ]+0:[      ]+40[                   ]+\.db 0x40\s.*
+[   ]+1:[      ]+40[                   ]+\.db 0x40\s.*
+[   ]+2:[      ]+40[                   ]+\.db 0x40\s.*
+[   ]+3:[      ]+40[                   ]+\.db 0x40\s.*
+[   ]+4:[      ]+40[                   ]+\.db 0x40\s.*
+[   ]+5:[      ]+40 00[                ]+nop.sis
+[   ]+7:[      ]+49[                   ]+\.db 0x49\s.*
+[   ]+8:[      ]+49[                   ]+\.db 0x49\s.*
+[   ]+9:[      ]+49[                   ]+\.db 0x49\s.*
+[   ]+a:[      ]+49[                   ]+\.db 0x49\s.*
+[   ]+b:[      ]+49[                   ]+\.db 0x49\s.*
+[   ]+c:[      ]+49 00[                ]+nop.lis
+[   ]+e:[      ]+52[                   ]+\.db 0x52\s.*
+[   ]+f:[      ]+52[                   ]+\.db 0x52\s.*
+[  ]+10:[      ]+52[                   ]+\.db 0x52\s.*
+[  ]+11:[      ]+52[                   ]+\.db 0x52\s.*
+[  ]+12:[      ]+52[                   ]+\.db 0x52\s.*
+[  ]+13:[      ]+52 00[                ]+nop.sil
+[  ]+15:[      ]+5b[                   ]+\.db 0x5b\s.*
+[  ]+16:[      ]+5b[                   ]+\.db 0x5b\s.*
+[  ]+17:[      ]+5b[                   ]+\.db 0x5b\s.*
+[  ]+18:[      ]+5b[                   ]+\.db 0x5b\s.*
+[  ]+19:[      ]+5b[                   ]+\.db 0x5b\s.*
+[  ]+1a:[      ]+5b 00[                ]+nop.lil
diff --git a/gas/testsuite/gas/z80/ez80_pref_dis.s b/gas/testsuite/gas/z80/ez80_pref_dis.s
new file mode 100644 (file)
index 0000000..77e9780
--- /dev/null
@@ -0,0 +1,8 @@
+; eZ80 memory mode prefix disassembler test
+       .text
+       .org    0
+       .db     0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0
+       .db     0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0
+       .db     0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0
+       .db     0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0
+
index afd8927c678c1f743c7e541400e77debd26bc317..d295e8643733ea8ba6b6b86350b632bf2c2fd37b 100644 (file)
@@ -1,6 +1,6 @@
 #name: Math48 floating point numbers
 #objdump: -s -j .data
-#as: -float=math48
+#as: -fp-s=math48
 
 .*:[     ]+file format (coff)|(elf32)\-z80
 
index 38f568cd7181a5f83f75c05383095e4cacaf7070..2875ede126fe2748bc2342407d3ab2740e40abbc 100644 (file)
@@ -1,5 +1,5 @@
 #name: Zeda32 floating point numbers
-#as: -float=zeda32
+#as: -fp-s=zeda32
 #objdump: -s -j .data
 
 .*:[     ]+file format (coff)|(elf32)\-z80
index 6fe0594ab20741c3e7655e4902ab9646220e47a9..6a0e9f61db5bd6aa294d5bb05b88567bc397f8b8 100644 (file)
@@ -4,11 +4,11 @@
 .*:[     ]+file format (coff)|(elf32)\-z80
 
 Contents of section \.data:
- 0000 2e646220 74657874 5c6e3833 37343830.*
- 0010 44454642 20746578 745c6e64 38373833.*
- 0020 4445464d 20746578 745c6e33 37383537.*
- 0030 44422074 6578745c 6e333837 39383337.*
- 0040 2e617363 69692074 6578745c 37325c32.*
- 0050 37375c66 5c6e5c30 2e617363 697a2074.*
- 0060 6578745c 6e393939 002e7374 72696e67.*
+ 0000 2e646220 74657874 5c6e3833 37343830 .*
+ 0010 44454642 20746578 745c6e64 38373833 .*
+ 0020 4445464d 20746578 745c6e33 37383537 .*
+ 0030 44422074 6578745c 6e333837 39383337 .*
+ 0040 2e617363 69692074 6578743a bf0c0a00 .*
+ 0050 2e617363 697a2074 6578740a 39393900 .*
+ 0060 2e737472 696e6720 74657874 0a090000 .*
 #pass
index 334d7f9e50da7bbb1c72a51fee852014db339dbb..6ba13fc0aca0172c47f255c7a5a11dd44d1d11c4 100644 (file)
@@ -90,6 +90,8 @@ if [istarget z80-*-*] then {
     run_dump_test "ez80_adl_all"
 #test for eZ80 instructions with sufficies in ADL mode
     run_dump_test "ez80_adl_suf"
+#test for eZ80 opcode prefixes as multiple bytes before instruction
+    run_dump_test "ez80_pref_dis"
 # test for SDCC compatibility mode
     run_dump_test "sdcc"
 # test for colonless labels
index 54619fa7d9934f85fafef4af52d704f2d3361308..accd25a0d86bf32be71da17f6c71017b3d258e2b 100644 (file)
@@ -1,3 +1,9 @@
+2020-01-14  Sergey Belyashov  <sergey.belyashov@gmail.com>
+
+       PR 25377
+       * z80-dis.c (suffix): Use .db instruction to generate double
+       prefix.
+
 2020-01-14  Alan Modra  <amodra@gmail.com>
 
        * z8k-dis.c (unpack_instr): Formatting.  Cast unsigned short
index b6f0606a17a21edd7d0ea22ec36a3b424d1ba987..7dfb5f2bd9e5612ced209b7084891bfdddc5d526 100644 (file)
@@ -738,7 +738,7 @@ suffix (struct buffer *buf, disassemble_info *info, const char *txt)
       || buf->data[1] == 0x5b)
     {
       /* Double prefix, or end of data.  */
-      info->fprintf_func (info->stream, "nop ;%s", txt);
+      info->fprintf_func (info->stream, ".db 0x%02x ; %s", (unsigned)buf->data[0], txt);
       buf->n_used = 1;
       return buf->n_used;
     }