This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello, Here is a a patch and some new files to support the Z80 cpu with gas. I volunteer to be the maintainer. Note that the patch in http://sourceware.org/ml/binutils/2005-10/msg00245.html is needed to make it pass the "macros dot" test. Kind regards, Arnold Metselaar ChangeLog: * Makefile.am: Add Z80 cpu. * Makefile.in: Regenerated. * Makefile: Regenerated. * app.c (do_scrub_chars)<TC_Z80>: Correctly scrub "ex af,af'" and disallow newlines in quoted strings. * configure.tgt: Add z80-*-coff. * expr.c (integer_constant)<TC_Z80>: Use 'B' as suffix for binary numbers and 'b' for backreferences. * expr.c (op_encoding)<TC_Z80>: Allow a single '=' as comparison operator. * config/obj-coff.h: Add format "coff-z80". * doc/Makefile.am: Add c-z80.texi. * doc/Makefile.in: Regenerated. * doc/all.texi: Add Z80. * doc/as.texinfo: Add z80 options and some z80-related remarks. * testsuite/gas/all/gas.exp: Exclude Z80-*-* from floating point, string, and cofftag test. * testsuite/gas/macros/macros.exp: Expect z80-*-* to fail the strings test because it has no string escapes. * config/tc-z80.c: New file * config/tc-z80.h: New file * doc/c-z80.texi: New file * testsuite/gas/z80/quotes.d: New file * testsuite/gas/z80/quotes.s: New file * testsuite/gas/z80/redef.d: New file * testsuite/gas/z80/redef.s: New file * testsuite/gas/z80/z80.exp: New file
Index: Makefile.am =================================================================== RCS file: /cvs/src/src/gas/Makefile.am,v retrieving revision 1.122 diff -u -p -r1.122 Makefile.am --- Makefile.am 18 Oct 2005 16:10:59 -0000 1.122 +++ Makefile.am 21 Oct 2005 13:14:06 -0000 @@ -88,6 +88,7 @@ CPU_TYPES = \ v850 \ xstormy16 \ xtensa \ + z80 \ z8k # Object format types. This is only used for dependency information. @@ -270,6 +271,7 @@ TARGET_CPU_CFILES = \ config/tc-v850.c \ config/tc-xstormy16.c \ config/tc-xtensa.c \ + config/tc-z80.c \ config/tc-z8k.c TARGET_CPU_HFILES = \ @@ -319,6 +321,7 @@ TARGET_CPU_HFILES = \ config/tc-v850.h \ config/tc-xstormy16.h \ config/tc-xtensa.h \ + config/tc-z80.h \ config/tc-z8k.h # OBJ files in config Index: Makefile.in =================================================================== RCS file: /cvs/src/src/gas/Makefile.in,v retrieving revision 1.133 diff -u -p -r1.133 Makefile.in --- Makefile.in 18 Oct 2005 16:10:59 -0000 1.133 +++ Makefile.in 21 Oct 2005 13:14:12 -0000 @@ -318,6 +318,7 @@ CPU_TYPES = \ v850 \ xstormy16 \ xtensa \ + z80 \ z8k @@ -498,6 +499,7 @@ TARGET_CPU_CFILES = \ config/tc-v850.c \ config/tc-xstormy16.c \ config/tc-xtensa.c \ + config/tc-z80.c \ config/tc-z8k.c TARGET_CPU_HFILES = \ @@ -547,6 +549,7 @@ TARGET_CPU_HFILES = \ config/tc-v850.h \ config/tc-xstormy16.h \ config/tc-xtensa.h \ + config/tc-z80.h \ config/tc-z8k.h Index: app.c =================================================================== RCS file: /cvs/src/src/gas/app.c,v retrieving revision 1.32 diff -u -p -r1.32 app.c --- app.c 29 Sep 2005 02:20:50 -0000 1.32 +++ app.c 21 Oct 2005 13:14:13 -0000 @@ -376,7 +376,11 @@ do_scrub_chars (int (*get) (char *, int) 15: After seeing a `(' at state 1, looking for a `)' as predicate. #endif - */ +#ifdef TC_Z80 + 16: After seeing an 'a' or an 'A' at the start of a symbol + 17: After seeing an 'f' or an 'F' in state 16 +#endif + */ /* I added states 9 and 10 because the MIPS ECOFF assembler uses constructs like ``.loc 1 20''. This was turning into ``.loc @@ -555,6 +559,17 @@ do_scrub_chars (int (*get) (char *, int) } ch = GET (); + +#ifdef TC_Z80 + if (ch == '\n' || ch == EOF) + { + state = old_state; + UNGET ('\n'); + as_warn (_("end of %s in string; inserted '%c'"), + (ch == EOF) ? "file" : "line" ,quotechar); + PUT (quotechar); + } +#else if (ch == EOF) { as_warn (_("end of file in string; '%c' inserted"), quotechar); @@ -562,6 +577,7 @@ do_scrub_chars (int (*get) (char *, int) UNGET ('\n'); PUT (quotechar); } +#endif else if (ch == quotechar) { state = old_state; @@ -665,6 +681,31 @@ do_scrub_chars (int (*get) (char *, int) PUT ('|'); continue; #endif +#ifdef TC_Z80 + case 16: + /* we have seen an 'a' at the start of a symbol, look for an 'f' */ + ch = GET (); + if (ch == 'f' || ch == 'F') + { + state = 17; + PUT (ch); + } + else + { + state = 9; + break; + } + case 17: + /* we have seen "af" at the start of a symbol, + a '\'' here is a part of that symbol */ + ch = GET (); + state = 9; + if (ch == '\'') + PUT ('`'); /* change to avoid warning about unclosed string */ + else + UNGET (ch); + break; +#endif } /* OK, we are somewhere in states 0 through 4 or 9 through 11. */ @@ -1241,6 +1282,30 @@ do_scrub_chars (int (*get) (char *, int) PUT (' '); break; } +#ifdef TC_Z80 + /* "af'" is a symbol containing '\'' */ + if (state == 3 && (ch=='a' || ch=='A')) + { + state = 16; + PUT (ch); + ch = GET (); + if (ch=='f' || ch=='F') + { + state = 17; + PUT (ch); + break; + } + else + { + state = 9; + if (!IS_SYMBOL_COMPONENT (ch)) + { + UNGET (ch); + break; + } + } + } +#endif if (state == 3) state = 9; Index: configure.tgt =================================================================== RCS file: /cvs/src/src/gas/configure.tgt,v retrieving revision 1.19 diff -u -p -r1.19 configure.tgt --- configure.tgt 30 Sep 2005 15:05:04 -0000 1.19 +++ configure.tgt 21 Oct 2005 13:14:14 -0000 @@ -377,6 +377,8 @@ case ${generic_target} in z8k-*-coff | z8k-*-sim) fmt=coff ;; + z80-*-coff) fmt=coff ;; + *-*-aout | *-*-scout) fmt=aout ;; *-*-freebsd* | *-*-kfreebsd*-gnu) fmt=elf em=freebsd ;; *-*-bsd*) fmt=aout em=sun3 ;; @@ -390,7 +392,7 @@ case ${generic_target} in esac case ${cpu_type} in - alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc | z8k) + alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc | z80 | z8k) bfd_gas=yes ;; esac Index: expr.c =================================================================== RCS file: /cvs/src/src/gas/expr.c,v retrieving revision 1.60 diff -u -p -r1.60 expr.c --- expr.c 11 Oct 2005 11:16:16 -0000 1.60 +++ expr.c 21 Oct 2005 13:14:16 -0000 @@ -300,6 +300,11 @@ integer_constant (int radix, expressionS else { c = *--suffix; +#ifdef TC_Z80 + /* On Z80 suffix 'b' means a backward reference and + suffix 'B' means a binary number. */ + if (c != 'b') +#endif c = TOUPPER (c); if (c == 'B') radix = 2; @@ -822,7 +827,13 @@ operand (expressionS *expressionP, enum break; case 'b': - if (LOCAL_LABELS_FB && ! (flag_m68k_mri || NUMBERS_WITH_SUFFIX)) + /* On Z80 suffix 'b' means a backward reference and + suffix 'B' means a binary number. */ + if (LOCAL_LABELS_FB +#ifndef TC_Z80 + && !(flag_m68k_mri || NUMBERS_WITH_SUFFIX) +#endif + ) { /* This code used to check for '+' and '-' here, and, in some conditions, fall through to call @@ -1092,10 +1103,14 @@ operand (expressionS *expressionP, enum if (! flag_m68k_mri) goto de_fault; #endif - if (flag_m68k_mri && hex_p (*input_line_pointer)) + if ( +#ifndef TC_Z80 + flag_m68k_mri && +#endif + hex_p (*input_line_pointer)) { - /* In MRI mode, '$' is also used as the prefix for a - hexadecimal constant. */ + /* In MRI mode and on Z80, '$' is also used as the prefix + for a hexadecimal constant. */ integer_constant (16, expressionP); break; } @@ -1396,7 +1411,13 @@ static const operatorT op_encoding[256] __, O_bit_or_not, __, __, __, O_modulus, O_bit_and, __, __, __, O_multiply, O_add, __, O_subtract, __, O_divide, __, __, __, __, __, __, __, __, - __, __, __, __, O_lt, __, O_gt, __, + __, __, __, __, O_lt, +#ifdef TC_Z80 + O_eq, /* We allow "=" in stead of "==" on Z80 */ +#else + __, +#endif + O_gt, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, Index: config/obj-coff.h =================================================================== RCS file: /cvs/src/src/gas/config/obj-coff.h,v retrieving revision 1.31 diff -u -p -r1.31 obj-coff.h --- config/obj-coff.h 11 Aug 2005 01:25:24 -0000 1.31 +++ config/obj-coff.h 21 Oct 2005 13:14:18 -0000 @@ -85,6 +85,11 @@ #define TARGET_FORMAT "coff-Intel-little" #endif +#ifdef TC_Z80 +#include "coff/z80.h" +#define TARGET_FORMAT "coff-z80" +#endif + #ifdef TC_Z8K #include "coff/z8k.h" #define TARGET_FORMAT "coff-z8k" Index: doc/Makefile.am =================================================================== RCS file: /cvs/src/src/gas/doc/Makefile.am,v retrieving revision 1.36 diff -u -p -r1.36 Makefile.am --- doc/Makefile.am 30 Sep 2005 15:05:07 -0000 1.36 +++ doc/Makefile.am 21 Oct 2005 13:14:20 -0000 @@ -55,6 +55,7 @@ CPU_DOCS = \ c-vax.texi \ c-v850.texi \ c-xtensa.texi \ + c-z80.texi \ c-z8k.texi gasver.texi: $(srcdir)/../../bfd/configure Index: doc/Makefile.in =================================================================== RCS file: /cvs/src/src/gas/doc/Makefile.in,v retrieving revision 1.69 diff -u -p -r1.69 Makefile.in --- doc/Makefile.in 30 Sep 2005 15:05:07 -0000 1.69 +++ doc/Makefile.in 21 Oct 2005 13:14:21 -0000 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.9.2 from Makefile.am. +# Makefile.in generated by automake 1.9.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -246,6 +246,7 @@ CPU_DOCS = \ c-vax.texi \ c-v850.texi \ c-xtensa.texi \ + c-z80.texi \ c-z8k.texi @@ -347,7 +348,7 @@ as.html: as.texinfo $(DVIPS) -o $@ $< uninstall-info-am: - $(PRE_UNINSTALL) + @$(PRE_UNINSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ @@ -363,7 +364,7 @@ uninstall-info-am: relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if cd "$(DESTDIR)$(infodir)"; then \ - echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done Index: doc/all.texi =================================================================== RCS file: /cvs/src/src/gas/doc/all.texi,v retrieving revision 1.22 diff -u -p -r1.22 all.texi --- doc/all.texi 30 Sep 2005 15:05:07 -0000 1.22 +++ doc/all.texi 21 Oct 2005 13:14:21 -0000 @@ -58,6 +58,7 @@ @set V850 @set VAX @set XTENSA +@set Z80 @set Z8000 @c Does this version of the assembler use the difference-table kluge? Index: doc/as.texinfo =================================================================== RCS file: /cvs/src/src/gas/doc/as.texinfo,v retrieving revision 1.135 diff -u -p -r1.135 as.texinfo --- doc/as.texinfo 18 Oct 2005 07:47:01 -0000 1.135 +++ doc/as.texinfo 21 Oct 2005 13:14:30 -0000 @@ -420,6 +420,17 @@ gcc(1), ld(1), and the Info entries for [@b{-mcpu=54[123589]}|@b{-mcpu=54[56]lp}] [@b{-mfar-mode}|@b{-mf}] [@b{-merrors-to-file} @var{<filename>}|@b{-me} @var{<filename>}] @end ifset +@ifset Z80 + +@emph{Target Z80 options:} + [@b{-z80}] [@b{-r800}] + [@b{ -ignore-undocumented-instructions}] [@b{-Wnud}] + [@b{ -ignore-unportable-instructions}] [@b{-Wnup}] + [@b{ -warn-undocumented-instructions}] [@b{-Wud}] + [@b{ -warn-unportable-instructions}] [@b{-Wup}] + [@b{ -forbid-undocumented-instructions}] [@b{-Fud}] + [@b{ -forbid-unportable-instructions}] [@b{-Fup}] +@end ifset @ifset Z8000 @c Z8000 has no machine-dependent assembler options @end ifset @@ -1138,6 +1149,35 @@ instructions must be exactly as specifie @end table @end ifset +@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 -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 notwork on R800. +@item -forbid-undocumented-instructions +@itemx -Fud +Treat all undocumented instructions as errors. +@item -forbid-unportable-instructions +@itemx -Fup +Treat undocumented Z80 intructions that do notwork on R800 as errors. +@end table +@end ifset + @c man end @menu @@ -2130,6 +2170,9 @@ is considered a comment and is ignored. @ifset VAX @samp{#} on the Vax; @end ifset +@ifset Z80 +@samp{;} for the Z80; +@end ifset @ifset Z8000 @samp{!} for the Z8000; @end ifset @@ -4271,6 +4314,13 @@ The syntax for @code{equ} on the HPPA is @samp{@var{symbol} .equ @var{expression}}. @end ifset +@ifset Z80 +The syntax for @code{equ} on the Z80 is +@samp{@var{symbol} equ @var{expression}}. +On the Z80 it is an eror if @var{symbol} is already defined, +compare @xref{Equiv}. +@end ifset + @node Equiv @section @code{.equiv @var{symbol}, @var{expression}} @cindex @code{equiv} directive @@ -5511,6 +5561,11 @@ The syntax for @code{set} on the HPPA is @samp{@var{symbol} .set @var{expression}}. @end ifset +@ifset Z80 +On Z80 @code{set} is a real instruction, use +@samp{@var{symbol} defl @var{expression}} instead. +@end ifset + @node Short @section @code{.short @var{expressions}} @@ -6176,6 +6231,9 @@ subject, see the hardware manufacturer's @ifset XTENSA * Xtensa-Dependent:: Xtensa Dependent Features @end ifset +@ifset Z80 +* Z80-Dependent:: Z80 Dependent Features +@end ifset @ifset Z8000 * Z8000-Dependent:: Z8000 Dependent Features @end ifset @@ -6330,6 +6388,10 @@ family. @include c-tic54x.texi @end ifset +@ifset Z80 +@include c-z80.texi +@end ifset + @ifset Z8000 @include c-z8k.texi @end ifset Index: testsuite/gas/all/gas.exp =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/all/gas.exp,v retrieving revision 1.30 diff -u -p -r1.30 gas.exp --- testsuite/gas/all/gas.exp 11 Oct 2005 11:16:17 -0000 1.30 +++ testsuite/gas/all/gas.exp 21 Oct 2005 13:14:30 -0000 @@ -23,8 +23,9 @@ if { [istarget hppa*-*-*] || [istarget * gas_test "p1480.s" "" "-a>" "simplifiable double subtraction" } -# No floating point support in assembly code for CRIS. -if { ![istarget cris-*-*] && ![istarget crisv32-*-*] } then { +# No floating point support in assembly code for CRIS and Z80. +if { ![istarget cris-*-*] && ![istarget crisv32-*-*] + && ![istarget z80-*-*] } then { gas_test "float.s" "" "" "simple FP constants" } @@ -78,6 +79,7 @@ case $target_triplet in { { iq2000*-*-* } { } { mips*-*-* } { } { *c54x*-*-* } { } + { z80-*-* } { } default { setup_xfail "*c30*-*-*" "*c4x*-*-*" "pdp11-*-*" run_dump_test redef @@ -189,7 +191,8 @@ case $target_triplet in { # We omit the ARM toolchains because they define locals to # start with '.', which eliminates .eos, .text etc from the output. # Omit c54x, since .tag and .def mean something different on that target -if { ([istarget *-*-coff*] && ![istarget *arm*-*-coff] && ![istarget thumb*-*-coff] && ![istarget xscale-*-coff] && ![istarget *c4x*-*-coff] && ![istarget *c54x*-*-coff]) \ +# Omit Z80, since octal numbers need a suffix on that target +if { ([istarget *-*-coff*] && ![istarget *arm*-*-coff] && ![istarget thumb*-*-coff] && ![istarget xscale-*-coff] && ![istarget *c4x*-*-coff] && ![istarget *c54x*-*-coff] && ![istarget z80-*-coff]) \ ||([istarget *-*-pe*] && ![istarget arm*-*-pe*] && ![istarget thumb*-*-pe*]) \ || [istarget i*86-*-aix*] \ || [istarget i*86-*-sco*] \ Index: testsuite/gas/macros/macros.exp =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/macros/macros.exp,v retrieving revision 1.24 diff -u -p -r1.24 macros.exp --- testsuite/gas/macros/macros.exp 6 May 2005 06:50:31 -0000 1.24 +++ testsuite/gas/macros/macros.exp 21 Oct 2005 13:14:33 -0000 @@ -56,6 +56,7 @@ if { ![istarget hppa*-*-*] || [istarget setup_xfail "powerpc*-*-aix*" "powerpc*-*-beos*" "powerpc*-*-macos*" setup_xfail "powerpc*-*-pe" "powerpc*-*-*win*" setup_xfail "rs6000-*-*" + setup_xfail "z80-*-*" # FIXME: Due to difference in what "consecutive octets" means. setup_xfail "*c4x*-*-*" "*c54x*-*"
Attachment:
addz80.gas.tgz
Description: application/tgz
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |