diff options
Diffstat (limited to 'gnu')
154 files changed, 4876 insertions, 160 deletions
diff --git a/gnu/usr.bin/gas/Makefile b/gnu/usr.bin/gas/Makefile index 339da05def7..53365076fd2 100644 --- a/gnu/usr.bin/gas/Makefile +++ b/gnu/usr.bin/gas/Makefile @@ -1,19 +1,31 @@ -# $OpenBSD: Makefile,v 1.2 1996/08/20 05:14:07 tholo Exp $ -# $NetBSD: Makefile,v 1.17 1995/04/23 07:58:35 cgd Exp $ +# $OpenBSD: Makefile,v 1.3 1998/02/15 18:48:39 niklas Exp $ +# $NetBSD: Makefile,v 1.25 1997/10/25 10:10:35 lukem Exp $ # @(#)Makefile 6.1 (Berkeley) 3/3/91 +TARGET_MACHINE_ARCH?= $(MACHINE_ARCH) -.include "config/Makefile.$(MACHINE_ARCH)" +.if (${TARGET_MACHINE_ARCH} == "i386") || \ + (${TARGET_MACHINE_ARCH} == "m68k") || \ + (${TARGET_MACHINE_ARCH} == "ns32k") || \ + (${TARGET_MACHINE_ARCH} == "sparc") || \ + (${TARGET_MACHINE_ARCH} == "vax") +.if exists(config/Makefile.$(TARGET_MACHINE_ARCH)) +.include "config/Makefile.$(TARGET_MACHINE_ARCH)" +.endif .if !defined (gas_hosttype) gas_hosttype=$(MACHINE_ARCH) .endif .if !defined (gas_target) -gas_target=$(MACHINE_ARCH) +gas_target=$(TARGET_MACHINE_ARCH) .endif .if !defined (gas_objformat) gas_objformat=aout .endif +.if ($(TARGET_MACHINE_ARCH) != $(MACHINE_ARCH)) +CPPFLAGS+= -DCROSS_COMPILE +.endif + ADDINCLUDE=-I${.OBJDIR} PROG= as @@ -23,7 +35,7 @@ SRCS+= app.c as.c atof-generic.c bignum-copy.c \ listing.c messages.c obstack.c output-file.c read.c subsegs.c \ symbols.c version.c write.c xmalloc.c xrealloc.c \ obj-$(gas_objformat).c -CFLAGS+= -I$(.CURDIR) ${ADDINCLUDE} -I$(.CURDIR)/config \ +CPPFLAGS+= -I$(.CURDIR) ${ADDINCLUDE} -I$(.CURDIR)/config \ -DOLD_GAS -DSIGTY=void -Derror=as_fatal \ -DNETBSD_AOUT @@ -33,12 +45,12 @@ CONF_HEADERS= targ-cpu.h obj-format.h host.h targ-env.h beforedepend ${PROG}: ${CONF_HEADERS} -targ-cpu.h: Makefile config/Makefile.$(MACHINE_ARCH) +targ-cpu.h: Makefile config/Makefile.$(TARGET_MACHINE_ARCH) @cmp -s $(.CURDIR)/config/tc-$(gas_target).h targ-cpu.h || \ ( echo "updating ${.TARGET}..." ; /bin/rm -f targ-cpu.h ; \ cp $(.CURDIR)/config/tc-$(gas_target).h targ-cpu.h ) -obj-format.h: Makefile config/Makefile.$(MACHINE_ARCH) +obj-format.h: Makefile config/Makefile.$(TARGET_MACHINE_ARCH) @cmp -s $(.CURDIR)/config/obj-$(gas_objformat).h obj-format.h || \ ( echo "updating ${.TARGET}..." ; /bin/rm -f obj-format.h ; \ cp $(.CURDIR)/config/obj-$(gas_objformat).h obj-format.h ) @@ -54,17 +66,21 @@ host.h: Makefile config/Makefile.$(MACHINE_ARCH) ( echo "updating ${.TARGET}..." ; /bin/rm -f host.h ; \ cp $(config_hostfile) host.h ) -.if exists ($(.CURDIR)/config/te-$(MACHINE_ARCH).h) -config_targenvfile= $(.CURDIR)/config/te-$(MACHINE_ARCH).h +.if exists ($(.CURDIR)/config/te-$(TARGET_MACHINE_ARCH).h) +config_targenvfile= $(.CURDIR)/config/te-$(TARGET_MACHINE_ARCH).h .else config_targenvfile= $(.CURDIR)/config/te-generic.h .endif -targ-env.h: Makefile config/Makefile.$(MACHINE_ARCH) +targ-env.h: Makefile config/Makefile.$(TARGET_MACHINE_ARCH) @cmp -s $(config_targenvfile) targ-env.h || \ ( echo "updating ${.TARGET}..." ; /bin/rm -f targ-env.h ; \ cp $(config_targenvfile) targ-env.h ) CLEANFILES+= ${CONF_HEADERS} +.endif + +MAN= as.1 + .include <bsd.prog.mk> diff --git a/gnu/usr.bin/gas/Makefile.in b/gnu/usr.bin/gas/Makefile.in index 1497b1fa286..f937cac8b30 100644 --- a/gnu/usr.bin/gas/Makefile.in +++ b/gnu/usr.bin/gas/Makefile.in @@ -1,3 +1,5 @@ +# $OpenBSD: Makefile.in,v 1.2 1998/02/15 18:48:39 niklas Exp $ + # Makefile for GNU Assembler # Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/NOTES.xcc b/gnu/usr.bin/gas/NOTES.xcc new file mode 100644 index 00000000000..686fe1da58c --- /dev/null +++ b/gnu/usr.bin/gas/NOTES.xcc @@ -0,0 +1,24 @@ +$OpenBSD: NOTES.xcc,v 1.1 1998/02/15 18:48:40 niklas Exp $ +$NetBSD: NOTES.xcc,v 1.1 1997/09/19 01:03:40 jeremy Exp $ +Notes for creating Cross-Assemblers on NetBSD +============================================= + +If your build host runs NetBSD, it is relatively painless to create a +cross-assembler in this directory. + +To create a cross-assembler: +1. Set the environment variable ``TARGET_MACHINE_ARCH'' to the + desired target architecture: + sparc, m68k, i386, ns32k, vax, or powerpc + + If your target is an m68k machine, you must edit config/tc-m68k.h. + * Remove the line ``#include <machine/param.h>''. + * Replace ``MID_MACHINE'' in the line: + #define AOUT_MACHTYPE MID_MACHINE + with: + MID_M68K (for m68k 8k page machine targets) + MID_M68K4K (for m68k 4k page machine targets) + If you are unsure which of these applies to your target, examine + $(BSDSRCDIR)/sys/arch/<target-machine>/include/param.h + +2. Run ``make''. diff --git a/gnu/usr.bin/gas/app.c b/gnu/usr.bin/gas/app.c index 221ae0a09f2..33722db10f4 100644 --- a/gnu/usr.bin/gas/app.c +++ b/gnu/usr.bin/gas/app.c @@ -1,3 +1,5 @@ +/* $OpenBSD: app.c,v 1.2 1998/02/15 18:48:40 niklas Exp $ */ + /* This is the Assembler Pre-Processor Copyright (C) 1987, 1990, 1991, 1992, 1994 Free Software Foundation, Inc. @@ -24,7 +26,7 @@ pair. This needs better error-handling. */ #ifndef lint -static char rcsid[] = "$Id: app.c,v 1.1 1995/10/18 08:38:57 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: app.c,v 1.2 1998/02/15 18:48:40 niklas Exp $"; #endif #include <stdio.h> diff --git a/gnu/usr.bin/gas/as.1 b/gnu/usr.bin/gas/as.1 index 313b8afbe9a..c7cf2fe26fd 100644 --- a/gnu/usr.bin/gas/as.1 +++ b/gnu/usr.bin/gas/as.1 @@ -1,3 +1,5 @@ +.\" $OpenBSD: as.1,v 1.4 1998/02/15 18:48:41 niklas Exp $ +.\" .\" Copyright (c) 1991, 1992 Free Software Foundation .\" See section COPYING for conditions for redistribution .TH as 1 "21 January 1992" "cygnus support" "GNU Development Tools" diff --git a/gnu/usr.bin/gas/atof-generic.c b/gnu/usr.bin/gas/atof-generic.c index b709a7ab00d..663389f622e 100644 --- a/gnu/usr.bin/gas/atof-generic.c +++ b/gnu/usr.bin/gas/atof-generic.c @@ -1,3 +1,5 @@ +/* $OpenBSD: atof-generic.c,v 1.2 1998/02/15 18:48:41 niklas Exp $ */ + /* atof_generic.c - turn a string of digits into a Flonum Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: atof-generic.c,v 1.1 1995/10/18 08:38:57 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: atof-generic.c,v 1.2 1998/02/15 18:48:41 niklas Exp $"; #endif #include <ctype.h> diff --git a/gnu/usr.bin/gas/bignum-copy.c b/gnu/usr.bin/gas/bignum-copy.c index 96fc8d3c207..48d9d136c3e 100644 --- a/gnu/usr.bin/gas/bignum-copy.c +++ b/gnu/usr.bin/gas/bignum-copy.c @@ -1,3 +1,5 @@ +/* $OpenBSD: bignum-copy.c,v 1.2 1998/02/15 18:48:42 niklas Exp $ */ + /* bignum_copy.c - copy a bignum Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: bignum-copy.c,v 1.1 1995/10/18 08:38:57 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: bignum-copy.c,v 1.2 1998/02/15 18:48:42 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/bignum.h b/gnu/usr.bin/gas/bignum.h index 374ceb0f81b..77b3fb0c86a 100644 --- a/gnu/usr.bin/gas/bignum.h +++ b/gnu/usr.bin/gas/bignum.h @@ -1,3 +1,5 @@ +/* $OpenBSD: bignum.h,v 1.2 1998/02/15 18:48:42 niklas Exp $ */ + /* bignum.h-arbitrary precision integers Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: bignum.h,v 1.1 1995/10/18 08:38:57 deraadt Exp $ - */ - /***********************************************************************\ * * * Arbitrary-precision integer arithmetic. * diff --git a/gnu/usr.bin/gas/bit_fix.h b/gnu/usr.bin/gas/bit_fix.h index 45c7548d977..d210ae88da3 100644 --- a/gnu/usr.bin/gas/bit_fix.h +++ b/gnu/usr.bin/gas/bit_fix.h @@ -1,3 +1,5 @@ +/* $OpenBSD: bit_fix.h,v 1.2 1998/02/15 18:48:43 niklas Exp $ */ + /* write.h Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: bit_fix.h,v 1.1 1995/10/18 08:38:57 deraadt Exp $ - */ - /* The bit_fix was implemented to support machines that need variables to be inserted in bitfields other than 1, 2 and 4 bytes. diff --git a/gnu/usr.bin/gas/cond.c b/gnu/usr.bin/gas/cond.c index 9d1a2433d14..cee7ea25b4a 100644 --- a/gnu/usr.bin/gas/cond.c +++ b/gnu/usr.bin/gas/cond.c @@ -1,3 +1,5 @@ +/* $OpenBSD: cond.c,v 1.2 1998/02/15 18:48:43 niklas Exp $ */ + /* cond.c - conditional assembly pseudo-ops, and .include Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: cond.c,v 1.1 1995/10/18 08:38:57 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: cond.c,v 1.2 1998/02/15 18:48:43 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/config/Makefile.i386 b/gnu/usr.bin/gas/config/Makefile.i386 index 2184edbc0ab..3fbc9db109e 100644 --- a/gnu/usr.bin/gas/config/Makefile.i386 +++ b/gnu/usr.bin/gas/config/Makefile.i386 @@ -1,5 +1,6 @@ +# $OpenBSD: Makefile.i386,v 1.2 1998/02/15 18:49:04 niklas Exp $ +# $NetBSD: Makefile.i386,v 1.5 1997/10/25 10:10:38 lukem Exp $ # from: @(#)Makefile.i386 6.1 (Berkeley) 3/3/91 -# $Id: Makefile.i386,v 1.1 1995/10/18 08:39:00 deraadt Exp $ -CFLAGS+= -DNON_BROKEN_WORDS -DPIC +CPPFLAGS+= -DNON_BROKEN_WORDS -DPIC SRCS+= tc-i386.c atof-ieee.c diff --git a/gnu/usr.bin/gas/config/Makefile.icm3216 b/gnu/usr.bin/gas/config/Makefile.icm3216 deleted file mode 100644 index 2a331433220..00000000000 --- a/gnu/usr.bin/gas/config/Makefile.icm3216 +++ /dev/null @@ -1,7 +0,0 @@ -# $Id: Makefile.icm3216,v 1.1 1995/10/18 08:39:00 deraadt Exp $ - -SRCS+= tc-ns32k.c atof-ns32k.c - -CFLAGS+= -DNS32032 -DNS32081 - -gas_target= ns32k diff --git a/gnu/usr.bin/gas/config/Makefile.m68k b/gnu/usr.bin/gas/config/Makefile.m68k index cd707ee78d5..e709bf7f7af 100644 --- a/gnu/usr.bin/gas/config/Makefile.m68k +++ b/gnu/usr.bin/gas/config/Makefile.m68k @@ -1,5 +1,5 @@ -# from: @(#)Makefile.hp300 6.1 (Berkeley) 3/3/91 -# $Id: Makefile.m68k,v 1.1 1995/10/18 08:39:01 deraadt Exp $ +# $OpenBSD: Makefile.m68k,v 1.2 1998/02/15 18:49:06 niklas Exp $ +# $NetBSD: Makefile.m68k,v 1.6 1997/10/25 10:10:40 lukem Exp $ -CFLAGS+= -DPIC +CPPFLAGS+= -DPIC SRCS+= tc-m68k.c atof-ieee.c diff --git a/gnu/usr.bin/gas/config/Makefile.mvme88k b/gnu/usr.bin/gas/config/Makefile.mvme88k index 79ba9099b30..cefabe72645 100644 --- a/gnu/usr.bin/gas/config/Makefile.mvme88k +++ b/gnu/usr.bin/gas/config/Makefile.mvme88k @@ -1,5 +1,5 @@ +# $OpenBSD: Makefile.mvme88k,v 1.2 1998/02/15 18:49:06 niklas Exp $ # from: @(#)Makefile.hp300 6.1 (Berkeley) 3/3/91 -# $Id: Makefile.mvme88k,v 1.1 1997/04/23 21:24:39 rahnds Exp $ -#CFLAGS+= -DPIC +#CPPFLAGS+= -DPIC SRCS+= tc-mvme88k.c atof-ieee.c diff --git a/gnu/usr.bin/gas/config/Makefile.ns32k b/gnu/usr.bin/gas/config/Makefile.ns32k index 780528aab3d..e1675083360 100644 --- a/gnu/usr.bin/gas/config/Makefile.ns32k +++ b/gnu/usr.bin/gas/config/Makefile.ns32k @@ -1,4 +1,5 @@ -# $OpenBSD: Makefile.ns32k,v 1.2 1996/04/23 00:15:57 niklas Exp $ +# $OpenBSD: Makefile.ns32k,v 1.3 1998/02/15 18:49:07 niklas Exp $ +# $NetBSD: Makefile.ns32k,v 1.3 1997/10/25 10:10:42 lukem Exp $ -CFLAGS+= -DPIC -DNS32532 -DNS32381 +CPPFLAGS+= -DPIC -DNS32532 -DNS32381 SRCS+= tc-ns32k.c atof-ieee.c diff --git a/gnu/usr.bin/gas/config/Makefile.powerpc b/gnu/usr.bin/gas/config/Makefile.powerpc new file mode 100644 index 00000000000..19b5c0a296c --- /dev/null +++ b/gnu/usr.bin/gas/config/Makefile.powerpc @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile.powerpc,v 1.1 1998/02/15 18:49:07 niklas Exp $ +# $NetBSD: Makefile.powerpc,v 1.2 1997/10/25 10:10:44 lukem Exp $ + +CPPFLAGS+= -DNON_BROKEN_WORDS -DPIC +SRCS+= tc-powerpc.c atof-ieee.c diff --git a/gnu/usr.bin/gas/config/Makefile.sparc b/gnu/usr.bin/gas/config/Makefile.sparc index a8bd90d95a6..c7863ed1974 100644 --- a/gnu/usr.bin/gas/config/Makefile.sparc +++ b/gnu/usr.bin/gas/config/Makefile.sparc @@ -1,5 +1,6 @@ +# $OpenBSD: Makefile.sparc,v 1.2 1998/02/15 18:49:08 niklas Exp $ +# $NetBSD: Makefile.sparc,v 1.3 1997/10/25 10:10:46 lukem Exp $ # from: @(#)Makefile.i386 6.1 (Berkeley) 3/3/91 -# $Id: Makefile.sparc,v 1.1 1995/10/18 08:39:01 deraadt Exp $ -CFLAGS+= -DNON_BROKEN_WORDS -DPIC +CPPFLAGS+= -DNON_BROKEN_WORDS -DPIC SRCS+= tc-sparc.c atof-ieee.c diff --git a/gnu/usr.bin/gas/config/Makefile.vax b/gnu/usr.bin/gas/config/Makefile.vax index 49774496f4e..2b7e5e43f6b 100644 --- a/gnu/usr.bin/gas/config/Makefile.vax +++ b/gnu/usr.bin/gas/config/Makefile.vax @@ -1,4 +1,5 @@ +# $OpenBSD: Makefile.vax,v 1.2 1998/02/15 18:49:09 niklas Exp $ +# $NetBSD: Makefile.vax,v 1.4 1997/10/25 10:10:47 lukem Exp $ # from: @(#)Makefile.vax 6.1 (Berkeley) 3/3/91 -# $Id: Makefile.vax,v 1.1 1995/10/18 08:39:01 deraadt Exp $ SRCS+= tc-vax.c atof-vax.c diff --git a/gnu/usr.bin/gas/config/aout.h b/gnu/usr.bin/gas/config/aout.h index fcc6a0ec391..9821d9b52e3 100644 --- a/gnu/usr.bin/gas/config/aout.h +++ b/gnu/usr.bin/gas/config/aout.h @@ -1,3 +1,5 @@ +/* $OpenBSD: aout.h,v 1.2 1998/02/15 18:49:09 niklas Exp $ */ + /* This file is aout.h Copyright (C) 1987-1992 Free Software Foundation, Inc. @@ -21,6 +23,7 @@ #ifndef __A_OUT_GNU_H__ #define __A_OUT_GNU_H__ +#ifndef TC_POWERPC /* PowerPC defines this in <machine/reloc.h> */ enum reloc_type { #ifdef TC_M88K @@ -73,6 +76,7 @@ enum reloc_type { #endif /* not TC_I860 */ #endif /* not TC_M88K */ }; +#endif /* not TC_POWERPC */ #ifdef TC_I860 diff --git a/gnu/usr.bin/gas/config/atof-ieee.c b/gnu/usr.bin/gas/config/atof-ieee.c index 90ca1bacfd4..ceeb99021c9 100644 --- a/gnu/usr.bin/gas/config/atof-ieee.c +++ b/gnu/usr.bin/gas/config/atof-ieee.c @@ -1,3 +1,5 @@ +/* $OpenBSD: atof-ieee.c,v 1.3 1998/02/15 18:49:10 niklas Exp $ */ + /* atof_ieee.c - turn a Flonum into an IEEE floating point number Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: atof-ieee.c,v 1.2 1995/12/27 21:36:04 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: atof-ieee.c,v 1.3 1998/02/15 18:49:10 niklas Exp $"; #endif #include "as.h" @@ -173,7 +175,7 @@ LITTLENUM_TYPE *words; /* Build the binary here. */ generic_floating_point_number.low = bits + MAX_PRECISION; generic_floating_point_number.high = NULL; generic_floating_point_number.leader = NULL; - generic_floating_point_number.exponent = NULL; + generic_floating_point_number.exponent = 0; generic_floating_point_number.sign = '\0'; /* Use more LittleNums than seems */ diff --git a/gnu/usr.bin/gas/config/atof-tahoe.c b/gnu/usr.bin/gas/config/atof-tahoe.c index 6425e93e128..1e344d999fd 100644 --- a/gnu/usr.bin/gas/config/atof-tahoe.c +++ b/gnu/usr.bin/gas/config/atof-tahoe.c @@ -1,3 +1,5 @@ +/* $OpenBSD: atof-tahoe.c,v 1.2 1998/02/15 18:49:10 niklas Exp $ */ + /* atof_tahoe.c - turn a string into a Tahoe floating point number Copyright (C) 1987 Free Software Foundation, Inc. */ diff --git a/gnu/usr.bin/gas/config/atof-vax.c b/gnu/usr.bin/gas/config/atof-vax.c index 8a6950204f0..1bcf588c85d 100644 --- a/gnu/usr.bin/gas/config/atof-vax.c +++ b/gnu/usr.bin/gas/config/atof-vax.c @@ -1,3 +1,5 @@ +/* $OpenBSD: atof-vax.c,v 1.2 1998/02/15 18:49:11 niklas Exp $ */ + /* atof_vax.c - turn a Flonum into a VAX floating point number Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/coff.h b/gnu/usr.bin/gas/config/coff.h index bcbb343695b..6d6f20150c7 100644 --- a/gnu/usr.bin/gas/config/coff.h +++ b/gnu/usr.bin/gas/config/coff.h @@ -1,3 +1,5 @@ +/* $OpenBSD: coff.h,v 1.2 1998/02/15 18:49:12 niklas Exp $ */ + /* coff.h Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/cplus-dem.c b/gnu/usr.bin/gas/config/cplus-dem.c index e3819bc098d..c82ea817fbf 100644 --- a/gnu/usr.bin/gas/config/cplus-dem.c +++ b/gnu/usr.bin/gas/config/cplus-dem.c @@ -1,3 +1,5 @@ +/* $OpenBSD: cplus-dem.c,v 1.2 1998/02/15 18:49:13 niklas Exp $ */ + /* Demangler for GNU C++ Copyright (C) 1989, 1992 Free Software Foundation, Inc. written by James Clark (jjc@jclark.uucp) diff --git a/gnu/usr.bin/gas/config/ho-ansi.h b/gnu/usr.bin/gas/config/ho-ansi.h index 2af034118ee..d946b81409e 100644 --- a/gnu/usr.bin/gas/config/ho-ansi.h +++ b/gnu/usr.bin/gas/config/ho-ansi.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-ansi.h,v 1.2 1998/02/15 18:49:13 niklas Exp $ */ + /* ho-ansi.h Host-specific header file for generic ansi environments. Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-decstation.h b/gnu/usr.bin/gas/config/ho-decstation.h index 1cab4d516e0..d3021a007e2 100644 --- a/gnu/usr.bin/gas/config/ho-decstation.h +++ b/gnu/usr.bin/gas/config/ho-decstation.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-decstation.h,v 1.2 1998/02/15 18:49:14 niklas Exp $ */ + /* ho-pmax.h Host-specific header file for decstation 3100. Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-generic.h b/gnu/usr.bin/gas/config/ho-generic.h index 493cfc69192..ab97067ebe5 100644 --- a/gnu/usr.bin/gas/config/ho-generic.h +++ b/gnu/usr.bin/gas/config/ho-generic.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-generic.h,v 1.2 1998/02/15 18:49:14 niklas Exp $ */ + /* ho-generic.h Generic host-specific header file. Copyright 1987, 1991, 1992 Free Software Foundation, Inc. @@ -25,6 +27,6 @@ #define HAVE_STRERROR -extern int free(); +extern void free(); /* end of ho-generic.h */ diff --git a/gnu/usr.bin/gas/config/ho-hpux.h b/gnu/usr.bin/gas/config/ho-hpux.h index d5ff31a8336..f8cd7d36aa4 100644 --- a/gnu/usr.bin/gas/config/ho-hpux.h +++ b/gnu/usr.bin/gas/config/ho-hpux.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-hpux.h,v 1.2 1998/02/15 18:49:15 niklas Exp $ */ + /* ho-hpux.h -- Header to compile the assembler under HP-UX Copyright (C) 1988, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-i386.h b/gnu/usr.bin/gas/config/ho-i386.h index fb9ce213bee..acfa0949199 100644 --- a/gnu/usr.bin/gas/config/ho-i386.h +++ b/gnu/usr.bin/gas/config/ho-i386.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-i386.h,v 1.2 1998/02/15 18:49:15 niklas Exp $ */ + /* ho-i386.h i386 specific header file. Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. @@ -16,10 +18,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: ho-i386.h,v 1.1 1995/10/18 08:39:01 deraadt Exp $ - */ - #define HO_I386 1 diff --git a/gnu/usr.bin/gas/config/ho-i386aix.h b/gnu/usr.bin/gas/config/ho-i386aix.h index d31b51ad57e..089a9ee1542 100644 --- a/gnu/usr.bin/gas/config/ho-i386aix.h +++ b/gnu/usr.bin/gas/config/ho-i386aix.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-i386aix.h,v 1.2 1998/02/15 18:49:16 niklas Exp $ */ + /* ho-386aix.h AIX PS/2 i386 specific header file. Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-rs6000.h b/gnu/usr.bin/gas/config/ho-rs6000.h index fe57e8e3cd9..25a82523b95 100644 --- a/gnu/usr.bin/gas/config/ho-rs6000.h +++ b/gnu/usr.bin/gas/config/ho-rs6000.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-rs6000.h,v 1.2 1998/02/15 18:49:17 niklas Exp $ */ + /* ho-rs6000.h Rs6000 host-specific header file. Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-sun3.h b/gnu/usr.bin/gas/config/ho-sun3.h index 0d68e6fd358..92f51c06806 100644 --- a/gnu/usr.bin/gas/config/ho-sun3.h +++ b/gnu/usr.bin/gas/config/ho-sun3.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-sun3.h,v 1.2 1998/02/15 18:49:17 niklas Exp $ */ + #include <ho-sunos.h> /* end of ho-sun3.h */ diff --git a/gnu/usr.bin/gas/config/ho-sun386.h b/gnu/usr.bin/gas/config/ho-sun386.h index 6c74df47598..0f6908d94c8 100644 --- a/gnu/usr.bin/gas/config/ho-sun386.h +++ b/gnu/usr.bin/gas/config/ho-sun386.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-sun386.h,v 1.2 1998/02/15 18:49:18 niklas Exp $ */ + #include <ho-sunos.h> extern int sprintf(); diff --git a/gnu/usr.bin/gas/config/ho-sun4.h b/gnu/usr.bin/gas/config/ho-sun4.h index cf619e83271..d3a51560969 100644 --- a/gnu/usr.bin/gas/config/ho-sun4.h +++ b/gnu/usr.bin/gas/config/ho-sun4.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-sun4.h,v 1.2 1998/02/15 18:49:18 niklas Exp $ */ + #include <ho-sunos.h> /* end of ho-sun4.h */ diff --git a/gnu/usr.bin/gas/config/ho-sunos.h b/gnu/usr.bin/gas/config/ho-sunos.h index 1193b1bf515..1340bda6e15 100644 --- a/gnu/usr.bin/gas/config/ho-sunos.h +++ b/gnu/usr.bin/gas/config/ho-sunos.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-sunos.h,v 1.2 1998/02/15 18:49:19 niklas Exp $ */ + /* This file is ho-sunos.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-sysv.h b/gnu/usr.bin/gas/config/ho-sysv.h index 443fe3bf104..e5fd8386556 100644 --- a/gnu/usr.bin/gas/config/ho-sysv.h +++ b/gnu/usr.bin/gas/config/ho-sysv.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-sysv.h,v 1.2 1998/02/15 18:49:19 niklas Exp $ */ + /* ho-sysv.h System V specific header file. Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-vax.h b/gnu/usr.bin/gas/config/ho-vax.h index eee0553b2d3..531ef0d0e25 100644 --- a/gnu/usr.bin/gas/config/ho-vax.h +++ b/gnu/usr.bin/gas/config/ho-vax.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-vax.h,v 1.2 1998/02/15 18:49:20 niklas Exp $ */ + /* ho-vax.h Intended for vax ultrix Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/ho-vms.h b/gnu/usr.bin/gas/config/ho-vms.h index 4b6680e919e..838b14cf956 100644 --- a/gnu/usr.bin/gas/config/ho-vms.h +++ b/gnu/usr.bin/gas/config/ho-vms.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ho-vms.h,v 1.2 1998/02/15 18:49:21 niklas Exp $ */ + /* ho-vax.h Intended for vax vms Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/mh-i386aix b/gnu/usr.bin/gas/config/mh-i386aix index a1e5d77e95a..317a748deb0 100644 --- a/gnu/usr.bin/gas/config/mh-i386aix +++ b/gnu/usr.bin/gas/config/mh-i386aix @@ -1,3 +1,5 @@ +# $OpenBSD: mh-i386aix,v 1.2 1998/02/15 18:49:21 niklas Exp $ + # Define SYSV as -DSYSV if you are using a System V operating system. SYSV = -DSYSV RANLIB = /bin/true diff --git a/gnu/usr.bin/gas/config/mt-i386aix b/gnu/usr.bin/gas/config/mt-i386aix index 225fc364b77..8c1d563c19d 100644 --- a/gnu/usr.bin/gas/config/mt-i386aix +++ b/gnu/usr.bin/gas/config/mt-i386aix @@ -1,3 +1,5 @@ +# $OpenBSD: mt-i386aix,v 1.2 1998/02/15 18:49:22 niklas Exp $ + # TDEFINES = -DBFD_HEADERS CC = gcc MINUS_G = -O diff --git a/gnu/usr.bin/gas/config/obj-aout.c b/gnu/usr.bin/gas/config/obj-aout.c index 4cbca4ad09f..2d8665ad5e2 100644 --- a/gnu/usr.bin/gas/config/obj-aout.c +++ b/gnu/usr.bin/gas/config/obj-aout.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-aout.c,v 1.3 1998/02/15 18:49:22 niklas Exp $ */ + /* a.out object file format Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -477,7 +479,8 @@ object_headers *headers; symbolP->sy_aux |= symbolP->sy_forward->sy_aux; symbolP->sy_sizexp = symbolP->sy_forward->sy_sizexp; - if (S_IS_EXTERNAL(symbolP->sy_forward)) + if (S_IS_EXTERNAL(symbolP->sy_forward) + && !S_IS_DEBUG(symbolP)) S_SET_EXTERNAL(symbolP); } /* if it has a forward reference */ symbolP->sy_forward=0; diff --git a/gnu/usr.bin/gas/config/obj-bfd-sunos.c b/gnu/usr.bin/gas/config/obj-bfd-sunos.c index 626516bdc8a..4e3753f25f2 100644 --- a/gnu/usr.bin/gas/config/obj-bfd-sunos.c +++ b/gnu/usr.bin/gas/config/obj-bfd-sunos.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-bfd-sunos.c,v 1.2 1998/02/15 18:49:23 niklas Exp $ */ + /* obj-bfd-sunos.c Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-bfd-sunos.h b/gnu/usr.bin/gas/config/obj-bfd-sunos.h index 958d8a9365b..6529476486f 100644 --- a/gnu/usr.bin/gas/config/obj-bfd-sunos.h +++ b/gnu/usr.bin/gas/config/obj-bfd-sunos.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-bfd-sunos.h,v 1.2 1998/02/15 18:49:24 niklas Exp $ */ + /* Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-bout.c b/gnu/usr.bin/gas/config/obj-bout.c index f6d930291f1..d1408ab3c72 100644 --- a/gnu/usr.bin/gas/config/obj-bout.c +++ b/gnu/usr.bin/gas/config/obj-bout.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-bout.c,v 1.2 1998/02/15 18:49:24 niklas Exp $ */ + /* b.out object file format Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-bout.h b/gnu/usr.bin/gas/config/obj-bout.h index e28d435a97c..fb7999469cf 100644 --- a/gnu/usr.bin/gas/config/obj-bout.h +++ b/gnu/usr.bin/gas/config/obj-bout.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-bout.h,v 1.2 1998/02/15 18:49:25 niklas Exp $ */ + /* b.out object file format Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-coff.c b/gnu/usr.bin/gas/config/obj-coff.c index 238e6c5c011..3bcc1a7b92a 100644 --- a/gnu/usr.bin/gas/config/obj-coff.c +++ b/gnu/usr.bin/gas/config/obj-coff.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-coff.c,v 1.2 1998/02/15 18:49:26 niklas Exp $ */ + /* coff object file format Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-coff.h b/gnu/usr.bin/gas/config/obj-coff.h index 9720d5e3729..6bc8d76056d 100644 --- a/gnu/usr.bin/gas/config/obj-coff.h +++ b/gnu/usr.bin/gas/config/obj-coff.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-coff.h,v 1.2 1998/02/15 18:49:27 niklas Exp $ */ + /* coff object file format Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-coffbfd.c b/gnu/usr.bin/gas/config/obj-coffbfd.c index d69c7a08cf1..981332212db 100644 --- a/gnu/usr.bin/gas/config/obj-coffbfd.c +++ b/gnu/usr.bin/gas/config/obj-coffbfd.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-coffbfd.c,v 1.2 1998/02/15 18:49:28 niklas Exp $ */ + /* coff object file format with bfd Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-coffbfd.h b/gnu/usr.bin/gas/config/obj-coffbfd.h index d1afabb24b0..5e3a7c21e34 100644 --- a/gnu/usr.bin/gas/config/obj-coffbfd.h +++ b/gnu/usr.bin/gas/config/obj-coffbfd.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-coffbfd.h,v 1.2 1998/02/15 18:49:28 niklas Exp $ */ + /* coff object file format Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-generic.c b/gnu/usr.bin/gas/config/obj-generic.c index a91eff9aac7..aa715aafc10 100644 --- a/gnu/usr.bin/gas/config/obj-generic.c +++ b/gnu/usr.bin/gas/config/obj-generic.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-generic.c,v 1.2 1998/02/15 18:49:29 niklas Exp $ */ + /* This file is obj-generic.c and is intended to be a template for object format specific source files. diff --git a/gnu/usr.bin/gas/config/obj-generic.h b/gnu/usr.bin/gas/config/obj-generic.h index f37072268b9..39495d6b398 100644 --- a/gnu/usr.bin/gas/config/obj-generic.h +++ b/gnu/usr.bin/gas/config/obj-generic.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-generic.h,v 1.2 1998/02/15 18:49:29 niklas Exp $ */ + /* This file is obj-generic.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-ieee.c b/gnu/usr.bin/gas/config/obj-ieee.c index 5f74a5f8edf..f04a6809538 100644 --- a/gnu/usr.bin/gas/config/obj-ieee.c +++ b/gnu/usr.bin/gas/config/obj-ieee.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-ieee.c,v 1.2 1998/02/15 18:49:30 niklas Exp $ */ + /* obj-format for ieee-695 records. Copyright (C) 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-ieee.h b/gnu/usr.bin/gas/config/obj-ieee.h index 3baa0811826..4edd19d0430 100644 --- a/gnu/usr.bin/gas/config/obj-ieee.h +++ b/gnu/usr.bin/gas/config/obj-ieee.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-ieee.h,v 1.2 1998/02/15 18:49:31 niklas Exp $ */ + /* This file is obj-ieee.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-vms.c b/gnu/usr.bin/gas/config/obj-vms.c index 5d12387e30d..e5b101c06a3 100644 --- a/gnu/usr.bin/gas/config/obj-vms.c +++ b/gnu/usr.bin/gas/config/obj-vms.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-vms.c,v 1.2 1998/02/15 18:49:32 niklas Exp $ */ + /* vms.c -- Write out a VAX/VMS object file Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/obj-vms.h b/gnu/usr.bin/gas/config/obj-vms.h index fec056d5608..ea065bb0b94 100644 --- a/gnu/usr.bin/gas/config/obj-vms.h +++ b/gnu/usr.bin/gas/config/obj-vms.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj-vms.h,v 1.2 1998/02/15 18:49:33 niklas Exp $ */ + /* VMS object file format Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-a29k.h b/gnu/usr.bin/gas/config/tc-a29k.h index fee1ca2b67d..7d631c3b137 100644 --- a/gnu/usr.bin/gas/config/tc-a29k.h +++ b/gnu/usr.bin/gas/config/tc-a29k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-a29k.h,v 1.2 1998/02/15 18:49:33 niklas Exp $ */ + /* tc-a29k.h -- Assemble for the AMD 29000. Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-generic.c b/gnu/usr.bin/gas/config/tc-generic.c index e69de29bb2d..ca37ae8225b 100644 --- a/gnu/usr.bin/gas/config/tc-generic.c +++ b/gnu/usr.bin/gas/config/tc-generic.c @@ -0,0 +1,2 @@ +/* $OpenBSD: tc-generic.c,v 1.2 1998/02/15 18:49:34 niklas Exp $ */ + diff --git a/gnu/usr.bin/gas/config/tc-generic.h b/gnu/usr.bin/gas/config/tc-generic.h index 181d4aa0b78..6ab9d283714 100644 --- a/gnu/usr.bin/gas/config/tc-generic.h +++ b/gnu/usr.bin/gas/config/tc-generic.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-generic.h,v 1.2 1998/02/15 18:49:34 niklas Exp $ */ + /* This file is tc-generic.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-h8300.h b/gnu/usr.bin/gas/config/tc-h8300.h index 6da78969c34..99cacaa88ca 100644 --- a/gnu/usr.bin/gas/config/tc-h8300.h +++ b/gnu/usr.bin/gas/config/tc-h8300.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-h8300.h,v 1.2 1998/02/15 18:49:35 niklas Exp $ */ + /* This file is tc-h8300.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-i386.h b/gnu/usr.bin/gas/config/tc-i386.h index 3ec3720086c..1d4928f9bab 100644 --- a/gnu/usr.bin/gas/config/tc-i386.h +++ b/gnu/usr.bin/gas/config/tc-i386.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-i386.h,v 1.2 1998/02/15 18:49:35 niklas Exp $ */ + /* tc-i386.h -- Header file for tc-i386.c Copyright (C) 1989, 1992 Free Software Foundation. @@ -17,10 +19,6 @@ along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: tc-i386.h,v 1.1 1995/10/18 08:39:05 deraadt Exp $ - */ - #ifndef TC_I386 #define TC_I386 1 diff --git a/gnu/usr.bin/gas/config/tc-i860.h b/gnu/usr.bin/gas/config/tc-i860.h index adc0d8f89e7..265496ed190 100644 --- a/gnu/usr.bin/gas/config/tc-i860.h +++ b/gnu/usr.bin/gas/config/tc-i860.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-i860.h,v 1.2 1998/02/15 18:49:36 niklas Exp $ */ + /* * This file is tc-i860.h. */ diff --git a/gnu/usr.bin/gas/config/tc-i960.h b/gnu/usr.bin/gas/config/tc-i960.h index caad4d622d3..15f0e8b6160 100644 --- a/gnu/usr.bin/gas/config/tc-i960.h +++ b/gnu/usr.bin/gas/config/tc-i960.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-i960.h,v 1.2 1998/02/15 18:49:36 niklas Exp $ */ + /* tc-i960.h - Basic 80960 instruction formats. Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-m68k.h b/gnu/usr.bin/gas/config/tc-m68k.h index 4ea74829354..bc92de1618b 100644 --- a/gnu/usr.bin/gas/config/tc-m68k.h +++ b/gnu/usr.bin/gas/config/tc-m68k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-m68k.h,v 1.2 1998/02/15 18:49:37 niklas Exp $ */ + /* This file is tc-m68k.h Copyright (C) 1987-1992 Free Software Foundation, Inc. @@ -25,7 +27,6 @@ #define MID_M68K 135 #define MID_M68K4K 136 -#include <machine/param.h> #define TC_M68K 1 @@ -33,7 +34,7 @@ #define REVERSE_SORT_RELOCS #endif /* OLD_GAS */ -#define AOUT_MACHTYPE MID_MACHINE +#define AOUT_MACHTYPE MID_M68K #define LOCAL_LABELS_FB #define tc_crawl_symbol_chain(a) {;} /* not used */ diff --git a/gnu/usr.bin/gas/config/tc-m68kmote.h b/gnu/usr.bin/gas/config/tc-m68kmote.h index 8d98bafd17a..5c56f26944f 100644 --- a/gnu/usr.bin/gas/config/tc-m68kmote.h +++ b/gnu/usr.bin/gas/config/tc-m68kmote.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-m68kmote.h,v 1.2 1998/02/15 18:49:38 niklas Exp $ */ + /* This file is tc-m68kmote.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-m88k.c b/gnu/usr.bin/gas/config/tc-m88k.c index fd7dd863ac4..49c293b45c0 100644 --- a/gnu/usr.bin/gas/config/tc-m88k.c +++ b/gnu/usr.bin/gas/config/tc-m88k.c @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-m88k.c,v 1.2 1998/02/15 18:49:38 niklas Exp $ */ + /* m88k.c -- Assembler for the Motorola 88000 Contributed by Devon Bowen of Buffalo University and Torbjorn Granlund of the Swedish Institute of Computer Science. diff --git a/gnu/usr.bin/gas/config/tc-m88k.h b/gnu/usr.bin/gas/config/tc-m88k.h index d5960d15e19..cd2561eaa95 100644 --- a/gnu/usr.bin/gas/config/tc-m88k.h +++ b/gnu/usr.bin/gas/config/tc-m88k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-m88k.h,v 1.2 1998/02/15 18:49:39 niklas Exp $ */ + /* m88k.h -- Assembler for the Motorola 88000 Contributed by Devon Bowen of Buffalo University and Torbjorn Granlund of the Swedish Institute of Computer Science. diff --git a/gnu/usr.bin/gas/config/tc-mips.c b/gnu/usr.bin/gas/config/tc-mips.c index e69de29bb2d..7d8ab872841 100644 --- a/gnu/usr.bin/gas/config/tc-mips.c +++ b/gnu/usr.bin/gas/config/tc-mips.c @@ -0,0 +1,2 @@ +/* $OpenBSD: tc-mips.c,v 1.2 1998/02/15 18:49:40 niklas Exp $ */ + diff --git a/gnu/usr.bin/gas/config/tc-mips.h b/gnu/usr.bin/gas/config/tc-mips.h index e69de29bb2d..7333be895f5 100644 --- a/gnu/usr.bin/gas/config/tc-mips.h +++ b/gnu/usr.bin/gas/config/tc-mips.h @@ -0,0 +1,2 @@ +/* $OpenBSD: tc-mips.h,v 1.2 1998/02/15 18:49:40 niklas Exp $ */ + diff --git a/gnu/usr.bin/gas/config/tc-mvme88k.c b/gnu/usr.bin/gas/config/tc-mvme88k.c index 8ad422b7035..b2568addb6d 100644 --- a/gnu/usr.bin/gas/config/tc-mvme88k.c +++ b/gnu/usr.bin/gas/config/tc-mvme88k.c @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-mvme88k.c,v 1.2 1998/02/15 18:49:41 niklas Exp $ */ + /* m88k.c -- Assembler for the Motorola 88000 Contributed by Devon Bowen of Buffalo University and Torbjorn Granlund of the Swedish Institute of Computer Science. diff --git a/gnu/usr.bin/gas/config/tc-mvme88k.h b/gnu/usr.bin/gas/config/tc-mvme88k.h index 510b68703a1..92770041ac7 100644 --- a/gnu/usr.bin/gas/config/tc-mvme88k.h +++ b/gnu/usr.bin/gas/config/tc-mvme88k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-mvme88k.h,v 1.2 1998/02/15 18:49:41 niklas Exp $ */ + /* m88k.h -- Assembler for the Motorola 88000 Contributed by Devon Bowen of Buffalo University and Torbjorn Granlund of the Swedish Institute of Computer Science. diff --git a/gnu/usr.bin/gas/config/tc-ns32k.h b/gnu/usr.bin/gas/config/tc-ns32k.h index e66c21fdd50..a42f16c95ac 100644 --- a/gnu/usr.bin/gas/config/tc-ns32k.h +++ b/gnu/usr.bin/gas/config/tc-ns32k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-ns32k.h,v 1.2 1998/02/15 18:49:42 niklas Exp $ */ + /* tc-ns32k.h -- Opcode table for National Semi 32k processor Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-powerpc.c b/gnu/usr.bin/gas/config/tc-powerpc.c new file mode 100644 index 00000000000..eef0e753267 --- /dev/null +++ b/gnu/usr.bin/gas/config/tc-powerpc.c @@ -0,0 +1,1314 @@ +/* $OpenBSD: tc-powerpc.c,v 1.1 1998/02/15 18:49:42 niklas Exp $ */ + +/* tc-ppc.c -- Assemble for the PowerPC or POWER (RS/6000) + Copyright (C) 1994 Free Software Foundation, Inc. + Written by Ian Lance Taylor, Cygnus Support. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include <stdio.h> +#include <ctype.h> +#include "as.h" +#include "subsegs.h" +#include "obstack.h" +#include "tc-powerpc.h" + +#include "opcode/ppc.h" + +/* This is the assembler for the PowerPC or POWER (RS/6000) chips. */ + +/* Tell the main code what the endianness is. */ +int target_big_endian; + +/* Whether or not, we've set target_big_endian. */ +static int set_target_endian = 0; + +static void ppc_set_cpu PARAMS((void)); +static unsigned long ppc_insert_operand + PARAMS((unsigned long insn, const struct powerpc_operand *operand, long val)); +static void ppc_macro PARAMS((char *str, const struct powerpc_macro *macro)); +static void ppc_byte PARAMS((int)); +static int ppc_is_toc_sym PARAMS((symbolS *sym)); +static void ppc_tc PARAMS((int)); +static void ppc_cons PARAMS((int)); +static enum reloc_type ppc_suffix PARAMS((char **)); + +/* Generic assembler global variables which must be defined by all + targets. */ + +/* Characters which always start a comment. */ +const char comment_chars[] = "#"; + +/* Characters which start a comment at the beginning of a line. */ +const char line_comment_chars[] = "#"; + +/* Characters which may be used to separate multiple commands on a + single line. */ +const char line_separator_chars[] = ";"; + +/* Characters which are used to indicate an exponent in a floating + point number. */ +const char EXP_CHARS[] = "eE"; + +/* Characters which mean that a number is a floating point constant, + as in 0d1.0. */ +const char FLT_CHARS[] = "dD"; + +/* The target specific pseudo-ops which we support. */ + +const pseudo_typeS md_pseudo_table[] = +{ + /* Pseudo-ops which must be overridden. */ + { "byte", ppc_byte, 0 }, + + { "long", ppc_cons, 4 }, + { "word", ppc_cons, 2 }, + { "short", ppc_cons, 2 }, + + /* This pseudo-op is used even when not generating XCOFF output. */ + { "tc", ppc_tc, 0 }, + + { NULL, NULL, 0 } +}; + +const relax_typeS md_relax_table[] = { + 0, +}; + +int md_reloc_size = 12; /* Size of relocation record */ + + + + +/* Local variables. */ + +/* The type of processor we are assembling for. This is one or more + of the PPC_OPCODE flags defined in opcode/ppc.h. */ +static int ppc_cpu = 0; + +/* The size of the processor we are assembling for. This is either + PPC_OPCODE_32 or PPC_OPCODE_64. */ +static int ppc_size = PPC_OPCODE_32; + +/* Opcode hash table. */ +static struct hash_control *ppc_hash; + +/* Macro hash table. */ +static struct hash_control *ppc_macro_hash; + +symbolS *GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE" */ + + +int +md_parse_option(argp, cntp, vecp) + char **argp; + int *cntp; + char ***vecp; +{ + char *arg; + + switch (**argp) { +#ifdef PIC + case 'k': + /* Predefine GOT symbol */ + GOT_symbol = symbol_find_or_make("__GLOBAL_OFFSET_TABLE_"); +#endif + case 'u': + /* -u means that any undefined symbols should be treated as + external, which is the default for gas anyhow. */ + break; + + case 'm': + arg = *argp + 1; + + /* -mpwrx and -mpwr2 mean to assemble for the IBM POWER/2 + (RIOS2). */ + if (strcmp(arg, "pwrx") == 0 || strcmp(arg, "pwr2") == 0) + ppc_cpu = PPC_OPCODE_POWER | PPC_OPCODE_POWER2; + /* -mpwr means to assemble for the IBM POWER (RIOS1). */ + else if (strcmp(arg, "pwr") == 0) + ppc_cpu = PPC_OPCODE_POWER; + /* -m601 means to assemble for the Motorola PowerPC 601, which includes + instructions that are holdovers from the Power. */ + else if (strcmp(arg, "601") == 0) + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_601; + /* -mppc, -mppc32, -m603, and -m604 mean to assemble for the + Motorola PowerPC 603/604. */ + else if (strcmp(arg, "ppc") == 0 + || strcmp(arg, "ppc32") == 0 + || strcmp(arg, "403") == 0 + || strcmp(arg, "603") == 0 + || strcmp(arg, "604") == 0) + ppc_cpu = PPC_OPCODE_PPC; + /* -mppc64 and -m620 mean to assemble for the 64-bit PowerPC + 620. */ + else if (strcmp(arg, "ppc64") == 0 || strcmp(arg, "620") == 0) { + ppc_cpu = PPC_OPCODE_PPC; + ppc_size = PPC_OPCODE_64; + } + /* -mcom means assemble for the common intersection between Power + and PowerPC. At present, we just allow the union, rather + than the intersection. */ + else if (strcmp(arg, "com") == 0) + ppc_cpu = PPC_OPCODE_COMMON; + /* -many means to assemble for any architecture (PWR/PWRX/PPC). */ + else if (strcmp(arg, "any") == 0) + ppc_cpu = PPC_OPCODE_ANY; + + /* -mlittle/-mbig set the endianess */ + else if (strcmp(arg, "little") == 0 || strcmp(arg, "little-endian") == 0) { + target_big_endian = 0; + set_target_endian = 1; + } else if (strcmp(arg, "big") == 0 || strcmp(arg, "big-endian") == 0) { + target_big_endian = 1; + set_target_endian = 1; + } else { + as_bad("invalid switch -m%s", arg); + return 0; + } + **argp = 0; + break; + + default: + return 0; + } + + return 1; +} + +void +md_show_usage(stream) + FILE *stream; +{ + fprintf(stream, "\ +PowerPC options:\n\ +-u ignored\n\ +-mpwrx, -mpwr2 generate code for IBM POWER/2 (RIOS2)\n\ +-mpwr generate code for IBM POWER (RIOS1)\n\ +-m601 generate code for Motorola PowerPC 601\n\ +-mppc, -mppc32, -m403, -m603, -m604\n\ + generate code for Motorola PowerPC 603/604\n\ +-mppc64, -m620 generate code for Motorola PowerPC 620\n\ +-mcom generate code Power/PowerPC common instructions\n\ +-many generate code for any architecture (PWR/PWRX/PPC)\n"); + fprintf(stream, "\ +-mlittle, -mlittle-endian\n\ + generate code for a little endian machine\n\ +-mbig, -mbig-endian generate code for a big endian machine\n"); +} + +/* Set ppc_cpu if it is not already set. */ +static void +ppc_set_cpu() +{ + const char *default_cpu = TARGET_CPU; + + if (ppc_cpu == 0) { + if (strcmp(default_cpu, "rs6000") == 0) + ppc_cpu = PPC_OPCODE_POWER; + else if (strcmp(default_cpu, "powerpc") == 0 + || strcmp(default_cpu, "powerpcle") == 0) + ppc_cpu = PPC_OPCODE_PPC; + else + as_fatal("Unknown default cpu = %s", default_cpu); + } +} + +/* This gets called to early */ +void +md_begin() +{ +} + +static int begin_called = 0; + +static void +really_begin() +{ + register const struct powerpc_opcode *op; + const struct powerpc_opcode *op_end; + const struct powerpc_macro *macro; + const struct powerpc_macro *macro_end; + int dup_insn = 0; + + begin_called = 1; + + ppc_set_cpu(); + + /* Insert the opcodes into a hash table. */ + ppc_hash = hash_new(); + + op_end = powerpc_opcodes + powerpc_num_opcodes; + for (op = powerpc_opcodes; op < op_end; op++) { + know((op->opcode & op->mask) == op->opcode); + + if ((op->flags & ppc_cpu) != 0 + && ((op->flags & (PPC_OPCODE_32 | PPC_OPCODE_64)) == 0 + || (op->flags & (PPC_OPCODE_32 | PPC_OPCODE_64)) == ppc_size)) { + const char *retval; + + retval = hash_insert(ppc_hash, op->name, op); + if (*retval) { + /* Ignore Power duplicates for -m601 */ + if ((ppc_cpu & PPC_OPCODE_601) != 0 + && (op->flags & PPC_OPCODE_POWER) != 0) + continue; + + as_bad("Internal assembler error for instruction %s", op->name); + dup_insn = 1; + } + } + } + + /* Insert the macros into a hash table. */ + ppc_macro_hash = hash_new(); + + macro_end = powerpc_macros + powerpc_num_macros; + for (macro = powerpc_macros; macro < macro_end; macro++) { + if ((macro->flags & ppc_cpu) != 0) { + const char *retval; + + retval = hash_insert(ppc_macro_hash, macro->name, macro); + if (*retval) { + as_bad("Internal assembler error for macro %s", macro->name); + dup_insn = 1; + } + } + } + + if (dup_insn) + abort(); + + /* Tell the main code what the endianness is if it is not overidden by the user. */ + if (!set_target_endian) { + set_target_endian = 1; + target_big_endian = 1; + } +} + +/* Nothing to do at the moment */ +void +md_end() +{ +} + +/* Parse an operand that is machine-specific */ +/* ARGSUSED */ +void +md_operand(exp) + expressionS *exp; +{ +} + +#define RELOC_PCRELATIVE(r) \ + (((r) >= RELOC_REL24 && (r) <= RELOC_REL14_NTAKEN) \ + || (r) == RELOC_PLT24 \ + || (r) == RELOC_REL32 \ + || (r) == RELOC_PLTREL32) +static int reloc_target_size[] = { + -1, 4, 4, 2, 2, 2, 2, 4, + -1, -1, 4, 4, -1, -1, 2, 2, + 2, 2, 4, -1, -1, -1, -1, -1, + -1, -1, 4, 4, 4, 2, 2, 2 +}; + +/* Insert an operand value into an instruction. */ +static unsigned long +ppc_insert_operand(insn, operand, val) + unsigned long insn; + const struct powerpc_operand *operand; + long val; +{ + if (operand->bits != 32) { + long min, max; + long test; + +#ifdef __notdef__ + if ((operand->flags & PPC_OPERAND_SIGNED) != 0) { + if ((operand->flags & PPC_OPERAND_SIGNOPT) != 0 + && ppc_size == PPC_OPCODE_32) + max = (1 << operand->bits) - 1; + else + max = (1 << (operand->bits - 1)) - 1; + min = - (1 << (operand->bits - 1)); + } else { + max = (1 << operand->bits) - 1; + min = 0; + } +#else + /* + * For now, we allow both signed and unsigned operands + */ + min = - (1 << (operand->bits - 1)); + max = (1 << operand->bits) - 1; +#endif + + if ((operand->flags & PPC_OPERAND_NEGATIVE) != 0) + test = - val; + else + test = val; + + if (test < min || test > max) { + const char *err = + "operand out of range (%s not between %ld and %ld)"; + char buf[100]; + + sprint_value(buf, test); + as_warn(err, buf, min, max); + } + } + + if (operand->insert) { + const char *errmsg; + + errmsg = NULL; + insn = (*operand->insert)(insn, (long)val, &errmsg); + if (errmsg != (const char *)NULL) + as_warn(errmsg); + } else + insn |= (((long) val & ((1 << operand->bits) - 1)) + << operand->shift); + + return insn; +} + +/* Parse @got, etc. and return the desired relocation. */ +static enum reloc_type +ppc_suffix(str_p) + char **str_p; +{ + struct map_reloc { + char *string; + int length; + enum reloc_type reloc; + }; + + char ident[20]; + char *str = *str_p; + char *str2; + int ch; + int len; + struct map_reloc *ptr; + +#define MAP(str,reloc) { str, sizeof(str)-1, reloc } + + static struct map_reloc mapping[] = { + MAP ("got", RELOC_GOT16), + MAP ("l", RELOC_16_LO), + MAP ("h", RELOC_16_HI), + MAP ("ha", RELOC_16_HA), + MAP ("brtaken", RELOC_REL14_TAKEN), + MAP ("brntaken", RELOC_REL14_NTAKEN), + MAP ("got@l", RELOC_GOT16_LO), + MAP ("got@h", RELOC_GOT16_HI), + MAP ("got@ha", RELOC_GOT16_HA), + MAP ("fixup", RELOC_32), + MAP ("pltrel24", RELOC_PLT24), + MAP ("copy", RELOC_COPY), + MAP ("globdat", RELOC_GLOB_DAT), + MAP ("local24pc", RELOC_LOCAL24PC), + MAP ("plt", RELOC_PLT32), + MAP ("pltrel", RELOC_PLTREL32), + MAP ("plt@l", RELOC_PLT16_LO), + MAP ("plt@h", RELOC_PLT16_HI), + MAP ("plt@ha", RELOC_PLT16_HA), + + { (char *)0, 0, RELOC_NONE } + }; + + if (*str++ != '@') + return RELOC_NONE; + + for (ch = *str, str2 = ident; + str2 < ident + sizeof(ident) - 1 && isalnum (ch) || ch == '@'; + ch = *++str) { + *str2++ = (islower (ch)) ? ch : tolower (ch); + } + + *str2 = '\0'; + len = str2 - ident; + + ch = ident[0]; + for (ptr = &mapping[0]; ptr->length > 0; ptr++) + if (ch == ptr->string[0] + && len == ptr->length + && memcmp(ident, ptr->string, ptr->length) == 0) { + *str_p = str; + return ptr->reloc; + } + + return RELOC_NONE; +} + +/* Like normal .long/.short/.word, except support @got, etc. */ +/* clobbers input_line_pointer, checks */ +/* end-of-line. */ +static void +ppc_cons(nbytes) + register int nbytes; /* 1=.byte, 2=.word, 4=.long */ +{ + expressionS exp; + enum reloc_type reloc; + long get; + segT segment; + char *p; + + if (!begin_called) + really_begin(); + + if (is_it_end_of_statement()) { + demand_empty_rest_of_line(); + return; + } + + do { + segment = expression(&exp); + if (!need_pass_2) { + know(segment != SEG_PASS1); + if (segment == SEG_DIFFERENCE && exp.X_add_symbol == NULL) { + as_bad("Subtracting symbol \"%s\"(segment\"%s\") is too hard. Absolute segment assumed.", + S_GET_NAME(exp.X_subtract_symbol), + segment_name(S_GET_SEGMENT(exp.X_subtract_symbol))); + segment = SEG_ABSOLUTE; + } + p = frag_more(nbytes); + switch (segment) { + case SEG_BIG: + as_bad("%s number invalid. Absolute 0 assumed.", + exp.X_add_number > 0 ? "Bignum" : "Floating-Point"); + md_number_to_chars(p, (long)0, nbytes); + break; + case SEG_ABSENT: + as_warn("0 assumed for missing expression"); + exp.X_add_number = 0; + know(exp.X_add_symbol == NULL); + /* FALLTHROUGH */ + case SEG_ABSOLUTE: + get = exp.X_add_number; + md_number_to_chars(p, get, nbytes); + break; + default: + if (*input_line_pointer == '@' + && (reloc = ppc_suffix(&input_line_pointer)) != RELOC_NONE) { + int size = reloc_target_size[reloc]; + int offset = nbytes - size; + + fix_new(frag_now, + p - frag_now->fr_literal + offset, + size, + exp.X_add_symbol, exp.X_subtract_symbol, + exp.X_add_number, 0, + reloc +#ifdef PIC + ,exp.X_got_symbol +#endif + ); + } else + fix_new(frag_now, p - frag_now->fr_literal, nbytes, + exp.X_add_symbol, exp.X_subtract_symbol, + exp.X_add_number, 0, + RELOC_32, +#ifdef PIC + exp.X_got_symbol +#endif + ); + break; + } + } + } while (*input_line_pointer++ == ','); + + input_line_pointer--; /* Put terminator back into stream. */ + demand_empty_rest_of_line(); +} + + +/* We need to keep a list of fixups. We can't simply generate them as + we go, because that would require us to first create the frag, and + that would screw up references to ``.''. */ +struct ppc_fixup { + expressionS exp; + int opindex; + enum reloc_type reloc; +}; + +#define MAX_INSN_FIXUPS 5 + +/* This routine is called for each instruction to be assembled. */ +void +md_assemble(str) + char *str; +{ + char *s; + const struct powerpc_opcode *opcode; + unsigned long insn; + const unsigned char *opindex_ptr; + int skip_optional; + int need_paren; + int next_opindex; + struct ppc_fixup fixups[MAX_INSN_FIXUPS]; + int fc; + char *f; + int i; + enum reloc_type reloc; + + if (!begin_called) + really_begin(); + + /* Get the opcode. */ + for (s = str; *s != '\0' && ! isspace (*s); s++) + ; + if (*s != '\0') + *s++ = '\0'; + + /* Look up the opcode in the hash table. */ + opcode = (const struct powerpc_opcode *) hash_find(ppc_hash, str); + if (opcode == (const struct powerpc_opcode *)NULL) { + const struct powerpc_macro *macro; + + macro = (const struct powerpc_macro *)hash_find(ppc_macro_hash, str); + if (macro == (const struct powerpc_macro *)NULL) + as_bad("Unrecognized opcode: `%s'", str); + else + ppc_macro(s, macro); + + return; + } + + insn = opcode->opcode; + + str = s; + while (isspace(*str)) + ++str; + + /* PowerPC operands are just expressions. The only real issue is + that a few operand types are optional. All cases which might use + an optional operand separate the operands only with commas (in + some cases parentheses are used, as in ``lwz 1,0(1)'' but such + cases never have optional operands). There is never more than + one optional operand for an instruction. So, before we start + seriously parsing the operands, we check to see if we have an + optional operand, and, if we do, we count the number of commas to + see whether the operand should be omitted. */ + skip_optional = 0; + for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++) { + const struct powerpc_operand *operand; + + operand = &powerpc_operands[*opindex_ptr]; + if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0) { + unsigned int opcount; + + /* There is an optional operand. Count the number of + commas in the input line. */ + if (*str == '\0') + opcount = 0; + else { + opcount = 1; + s = str; + while ((s = strchr(s, ',')) != (char *)NULL) { + ++opcount; + ++s; + } + } + + /* If there are fewer operands in the line then are called + for by the instruction, we want to skip the optional + operand. */ + if (opcount < strlen(opcode->operands)) + skip_optional = 1; + + break; + } + } + + /* Gather the operands. */ + need_paren = 0; + next_opindex = 0; + fc = 0; + for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++) { + const struct powerpc_operand *operand; + const char *errmsg; + char *hold; + expressionS ex; + char endc; + + if (next_opindex == 0) + operand = &powerpc_operands[*opindex_ptr]; + else { + operand = &powerpc_operands[next_opindex]; + next_opindex = 0; + } + + errmsg = NULL; + + /* If this is a fake operand, then we do not expect anything + from the input. */ + if ((operand->flags & PPC_OPERAND_FAKE) != 0) { + insn = (*operand->insert)(insn, 0L, &errmsg); + if (errmsg != (const char *)NULL) + as_warn(errmsg); + continue; + } + + /* If this is an optional operand, and we are skipping it, just + insert a zero. */ + if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0 + && skip_optional) { + if (operand->insert) { + insn = (*operand->insert)(insn, 0L, &errmsg); + if (errmsg != (const char *)NULL) + as_warn(errmsg); + } + if ((operand->flags & PPC_OPERAND_NEXT) != 0) + next_opindex = *opindex_ptr + 1; + continue; + } + + /* Gather the operand. */ + hold = input_line_pointer; + input_line_pointer = str; + + expression(&ex); + str = input_line_pointer; + input_line_pointer = hold; + + if (ex.X_add_symbol == NULL + && ex.X_subtract_symbol == NULL) { + /* Allow @HA, @L, @H on constants. */ + char *orig_str = str; + + if ((reloc = ppc_suffix(&str)) != RELOC_NONE) + switch (reloc) { + default: + str = orig_str; + break; + + case RELOC_16_LO: + ex.X_add_number &= 0xffff; + break; + + case RELOC_16_HI: + ex.X_add_number = (ex.X_add_number >> 16) & 0xffff; + break; + + case RELOC_16_HA: + ex.X_add_number = ((ex.X_add_number >> 16) & 0xffff) + + ((ex.X_add_number >> 15) & 1); + break; + } + insn = ppc_insert_operand(insn, operand, ex.X_add_number); + } else if ((reloc = ppc_suffix(&str)) != RELOC_NONE) { + /* For the absoulte forms of branchs, convert the PC relative form back into + the absolute. */ + if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0) + switch (reloc) { + case RELOC_REL24: + reloc = RELOC_24; + break; + case RELOC_REL14: + reloc = RELOC_14; + break; + case RELOC_REL14_TAKEN: + reloc = RELOC_14_TAKEN; + break; + case RELOC_REL14_NTAKEN: + reloc = RELOC_14_NTAKEN; + break; + } + + /* We need to generate a fixup for this expression. */ + if (fc >= MAX_INSN_FIXUPS) + as_fatal ("too many fixups"); + fixups[fc].exp = ex; + fixups[fc].opindex = 0; + fixups[fc].reloc = reloc; + ++fc; + } else { + /* We need to generate a fixup for this expression. */ + if (fc >= MAX_INSN_FIXUPS) + as_fatal ("too many fixups"); + fixups[fc].exp = ex; + fixups[fc].opindex = *opindex_ptr; + fixups[fc].reloc = RELOC_NONE; + ++fc; + } + + if (need_paren) { + endc = ')'; + need_paren = 0; + } else if ((operand->flags & PPC_OPERAND_PARENS) != 0) { + endc = '('; + need_paren = 1; + } + else + endc = ','; + + /* The call to expression should have advanced str past any + whitespace. */ + if (*str != endc + && (endc != ',' || *str != '\0')) { + as_bad("syntax error; found `%c' but expected `%c'", *str, endc); + break; + } + + if (*str != '\0') + ++str; + } + + while (isspace (*str)) + ++str; + + if (*str != '\0') + as_bad("junk at end of line: `%s'", str); + + /* Write out the instruction. */ + f = frag_more(4); + md_number_to_chars(f, insn, 4); + + /* Create any fixups. At this point we do not use a + enum reloc_type, but instead just use the + RELOC_NONE plus the operand index. This lets us easily + handle fixups for any operand type, although that is admittedly + not a very exciting feature. We pick a reloc type in + md_apply_fix. */ + for (i = 0; i < fc; i++) { + const struct powerpc_operand *operand; + + operand = &powerpc_operands[fixups[i].opindex]; + if (fixups[i].reloc != RELOC_NONE) { + int size = reloc_target_size[fixups[i].reloc]; + int pcrel = RELOC_PCRELATIVE(fixups[i].reloc); + int offset; + + offset = target_big_endian ? (4 - size) : 0; + + if (size < 1 || size > 4) + abort(); + + fix_new(frag_now, f - frag_now->fr_literal + offset, size, + fixups[i].exp.X_add_symbol, + fixups[i].exp.X_subtract_symbol, + fixups[i].exp.X_add_number, + pcrel, fixups[i].reloc +#ifdef PIC + ,fixups[i].exp.X_got_symbol +#endif + ); + } else + fix_new(frag_now, f - frag_now->fr_literal, 4, + fixups[i].exp.X_add_symbol, + fixups[i].exp.X_subtract_symbol, + fixups[i].exp.X_add_number, + (operand->flags & PPC_OPERAND_RELATIVE) != 0, + (enum reloc_type)(fixups[i].opindex + (int)RELOC_MAX) +#ifdef PIC + ,fixups[i].exp.X_got_symbol +#endif + ); + } +} + +/* Handle a macro. Gather all the operands, transform them as + described by the macro, and call md_assemble recursively. All the + operands are separated by commas; we don't accept parentheses + around operands here. */ +static void +ppc_macro(str, macro) + char *str; + const struct powerpc_macro *macro; +{ + char *operands[10]; + unsigned int count; + char *s; + unsigned int len; + const char *format; + int arg; + char *send; + char *complete; + + /* Gather the users operands into the operands array. */ + count = 0; + s = str; + while (1) { + if (count >= sizeof operands / sizeof operands[0]) + break; + operands[count++] = s; + s = strchr (s, ','); + if (s == (char *) NULL) + break; + *s++ = '\0'; + } + + if (count != macro->operands) { + as_bad("wrong number of operands"); + return; + } + + /* Work out how large the string must be (the size is unbounded + because it includes user input). */ + len = 0; + format = macro->format; + while (*format != '\0') { + if (*format != '%') { + ++len; + ++format; + } else { + arg = strtol(format + 1, &send, 10); + know(send != format && arg >= 0 && arg < count); + len += strlen(operands[arg]); + format = send; + } + } + + /* Put the string together. */ + complete = s = (char *)alloca(len + 1); + format = macro->format; + while (*format != '\0') { + if (*format != '%') + *s++ = *format++; + else { + arg = strtol(format + 1, &send, 10); + strcpy(s, operands[arg]); + s += strlen(s); + format = send; + } + } + *s = '\0'; + + /* Assemble the constructed instruction. */ + md_assemble(complete); +} + +/* Pseudo-op handling. */ + +/* The .byte pseudo-op. This is similar to the normal .byte + pseudo-op, but it can also take a single ASCII string. */ +static void +ppc_byte(ignore) + int ignore; +{ + if (*input_line_pointer != '\"') { + cons(1); + return; + } + + /* Gather characters. A real double quote is doubled. Unusual + characters are not permitted. */ + ++input_line_pointer; + while (1) { + char c; + + c = *input_line_pointer++; + + if (c == '\"') { + if (*input_line_pointer != '\"') + break; + ++input_line_pointer; + } + + FRAG_APPEND_1_CHAR(c); + } + + demand_empty_rest_of_line(); +} + +/* The .tc pseudo-op. This is used when generating either XCOFF or + ELF. This takes two or more arguments. + + When generating XCOFF output, the first argument is the name to + give to this location in the toc; this will be a symbol with class + TC. The rest of the arguments are 4 byte values to actually put at + this location in the TOC; often there is just one more argument, a + relocateable symbol reference. + + When not generating XCOFF output, the arguments are the same, but + the first argument is simply ignored. */ +static void +ppc_tc(ignore) + int ignore; +{ + + /* Skip the TOC symbol name. */ + while (is_part_of_name(*input_line_pointer) + || *input_line_pointer == '[' + || *input_line_pointer == ']' + || *input_line_pointer == '{' + || *input_line_pointer == '}') + ++input_line_pointer; + + /* Align to a four byte boundary. */ + frag_align(2, 0); + record_alignment(now_seg, 2); + + if (*input_line_pointer != ',') + demand_empty_rest_of_line(); + else { + ++input_line_pointer; + cons(4); + } +} + +/* Turn a string in input_line_pointer into a floating point constant + of type type, and store the appropriate bytes in *litp. The number + of LITTLENUMS emitted is stored in *sizep . An error message is + returned. */ +char * +md_atof(type, litp, sizep) + int type; + char *litp; + int *sizep; +{ + int prec; + LITTLENUM_TYPE words[4]; + char *t; + int i; + + if (!begin_called) + really_begin(); + + switch (type) { + case 'f': + prec = 2; + break; + + case 'd': + prec = 4; + break; + + default: + *sizep = 0; + return "bad call to md_atof"; + } + + t = atof_ieee(input_line_pointer, type, words); + if (t) + input_line_pointer = t; + + *sizep = prec * 2; + + if (target_big_endian) { + for (i = 0; i < prec; i++) { + md_number_to_chars(litp, (valueT) words[i], 2); + litp += 2; + } + } else { + for (i = prec - 1; i >= 0; i--) { + md_number_to_chars(litp, (valueT) words[i], 2); + litp += 2; + } + } + + return ""; +} + +/* Write a value out to the object file, using the appropriate + endianness. */ +void +md_number_to_chars(buf, val, n) + char *buf; + long val; + int n; +{ + if (!begin_called) + really_begin(); + + if (target_big_endian) + buf += n; + while (--n >= 0) { + if (target_big_endian) + *--buf = val; + else + *buf++ = val; + val >>= 8; + } +} + +/* Align a section (I don't know why this is machine dependent). */ +long +md_section_align(seg, addr) + segT seg; + long addr; +{ + /* Align all sections to 128-bit boundaries */ + return (addr + 15) & ~15; +} + +/* We don't have any form of relaxing. */ +int +md_estimate_size_before_relax(fragp, seg) + fragS *fragp; + segT seg; +{ + abort(); + return 0; +} + +/* Convert a machine dependent frag. We never generate these. */ +void +md_convert_frag(headers, fragp) + object_headers *headers; + fragS *fragp; +{ + abort(); +} + +/* We have no need to default values of symbols. */ +/*ARGSUSED*/ +symbolS * +md_undefined_symbol(name) + char *name; +{ + return 0; +} + +/* Functions concerning relocs. */ + +/* The location from which a PC relative jump should be calculated, + given a PC relative reloc. */ +long +md_pcrel_from(fixp) + fixS *fixp; +{ + return fixp->fx_frag->fr_address + fixp->fx_where; +} + +/* See whether a symbol is in the TOC section. FIXME (ws) */ +static int +ppc_is_toc_sym(sym) + symbolS *sym; +{ + return strcmp(segment_name(S_GET_SEGMENT(sym)), ".got") == 0; +} + +static long +md_getl(p) + unsigned char *p; +{ + if (target_big_endian) + return (p[0] << 24) + | (p[1] << 16) + | (p[2] << 8) + | p[3]; + else + return (p[3] << 24) + | (p[2] << 16) + | (p[1] << 8) + | p[0]; +} + +static void +md_putl(l, p) + unsigned long l; + unsigned char *p; +{ + if (target_big_endian) { + *p++ = l >> 24; + *p++ = l >> 16; + *p++ = l >> 8; + *p++ = l; + } else { + *p++ = l; + *p++ = l >> 8; + *p++ = l >> 16; + *p++ = l >> 24; + } +} + +/* Apply a fixup to the object code. This is called for all the + fixups we generated by the call to fix_new_exp, above. In the call + above we used a reloc code which was the largest legal reloc code + plus the operand index. Here we undo that to recover the operand + index. At this point all symbol values should be fully resolved, + and we attempt to completely resolve the reloc. If we can not do + that, we determine the correct reloc code and put it back in the + fixup. */ + +void +md_apply_fix(fixp, val) + fixS *fixp; + long val; +{ + /* Remember value for reloc entry */ + fixp->fx_addnumber = val; + + if (!fixp->fx_pcrel && fixp->fx_addsy) { + val = fixp->fx_offset; + if (fixp->fx_subsy != (symbolS *)NULL) { + /* We can't actually support subtracting a symbol. */ + as_bad("expression too complex"); + } + } + + if ((int)fixp->fx_r_type >= (int)RELOC_MAX) { + int opindex; + const struct powerpc_operand *operand; + char *where; + unsigned long insn; + + opindex = (int)fixp->fx_r_type - (int)RELOC_MAX; + + operand = &powerpc_operands[opindex]; + + /* Fetch the instruction, insert the fully resolved operand + value, and stuff the instruction back again. */ + where = fixp->fx_frag->fr_literal + fixp->fx_where; + insn = md_getl((unsigned char *)where); + insn = ppc_insert_operand(insn, operand, val); + md_putl(insn, (unsigned char *)where); + + /* Determine a reloc value based on the operand information. + We are only prepared to turn a few of the operands into + relocs. + FIXME: We need to handle the DS field at the very least. + FIXME: Selecting the reloc type is a bit haphazard; perhaps + there should be a new field in the operand table. */ + if ((operand->flags & PPC_OPERAND_RELATIVE) != 0 + && operand->bits == 26 + && operand->shift == 0) + fixp->fx_r_type = RELOC_REL24; + else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0 + && operand->bits == 16 + && operand->shift == 0) + fixp->fx_r_type = RELOC_REL14; + else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0 + && operand->bits == 26 + && operand->shift == 0) + fixp->fx_r_type = RELOC_24; + else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0 + && operand->bits == 16 + && operand->shift == 0) + fixp->fx_r_type = RELOC_14; + else if ((operand->flags & PPC_OPERAND_PARENS) != 0 + && operand->bits == 16 + && operand->shift == 0 + && operand->insert == NULL + && fixp->fx_addsy != NULL + && ppc_is_toc_sym(fixp->fx_addsy)) { + fixp->fx_size = 2; + if (target_big_endian) + fixp->fx_where += 2; + fixp->fx_r_type = RELOC_GOT16; + } else if (fixp->fx_addsy == NULL + && fixp->fx_subsy == NULL) + fixp->fx_r_type = RELOC_NONE; + else { + as_bad("unresolved expression that must be resolved"); + if (fixp->fx_addsy) + ps(fixp->fx_addsy); + if (fixp->fx_subsy) { + fprintf(stderr, "-"); + ps(fixp->fx_subsy); + } + fprintf(stderr,"\n"); + return; + } + } else { + switch (fixp->fx_r_type) { + case RELOC_32: + if (fixp->fx_pcrel) { + fixp->fx_r_type = RELOC_REL32; + val += fixp->fx_frag->fr_address + fixp->fx_where; + } /* fall through */ + case RELOC_REL32: + md_number_to_chars(fixp->fx_frag->fr_literal + fixp->fx_where, + val, 4); + break; + case RELOC_16_HA: + val += (val << 1) & 0x8000; + /* Fall Through */ + case RELOC_16_HI: + val >>= 16; + /* Fall Through */ + case RELOC_16_LO: + case RELOC_GOT16: + case RELOC_16: + if (fixp->fx_pcrel) + abort(); + + md_number_to_chars(fixp->fx_frag->fr_literal + fixp->fx_where, + val, 2); + break; + default: + fprintf(stderr, + "Gas failure, reloc value %d\n", fixp->fx_r_type); + fflush(stderr); + abort(); + } + } +} + +void +tc_aout_fix_to_chars(where, fixp, segment_address) + char *where; + fixS *fixp; + relax_addressT segment_address; +{ + long r_index; + long r_extern; + long r_addend = 0; + long r_address; +#ifdef PIC + int kflag = 0; +#endif + + know(fixp->fx_addsy); + + if (!S_IS_DEFINED(fixp->fx_addsy)) { + r_extern = 1; + r_index = fixp->fx_addsy->sy_number; + } else { + r_extern = 0; + r_index = S_GET_TYPE(fixp->fx_addsy); +#ifdef PIC + if (flagseen['k']) + as_bad("tc_aout_fix_to_chars for -k to be done"); +#endif + } + + md_number_to_chars(where, + r_address = fixp->fx_frag->fr_address + + fixp->fx_where + - segment_address, + 4); + + /* This is probably wrong for little-endian, but... */ + where[4] = r_index >> 16; + where[5] = r_index >> 8; + where[6] = r_index; + where[7] = ((r_extern << 7) & 0x80) | (fixp->fx_r_type & 0x1f); + + if (fixp->fx_addsy->sy_frag) + r_addend = fixp->fx_addsy->sy_frag->fr_address; + + if (fixp->fx_pcrel) { +#ifdef PIC + if (fixp->fx_gotsy) { + r_addend = r_address; + r_addend += fixp->fx_addnumber; + } else +#endif + r_addend -= r_address; + } else { +#ifdef PIC + if (kflag) + r_addend = 0; + else +#endif + r_addend = fixp->fx_addnumber; + } + + md_number_to_chars(&where[8], r_addend, 4); +} diff --git a/gnu/usr.bin/gas/config/tc-powerpc.h b/gnu/usr.bin/gas/config/tc-powerpc.h new file mode 100644 index 00000000000..d498bff2bda --- /dev/null +++ b/gnu/usr.bin/gas/config/tc-powerpc.h @@ -0,0 +1,56 @@ +/* $OpenBSD: tc-powerpc.h,v 1.1 1998/02/15 18:49:43 niklas Exp $ */ + +/* tc-ppc.h -- Header file for tc-ppc.c. + Copyright (C) 1994 Free Software Foundation, Inc. + Written by Ian Lance Taylor, Cygnus Support. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef TC_POWERPC +#define TC_POWERPC + +#ifdef __NetBSD__ +#include <machine/reloc.h> +#define AOUT_MACHTYPE 149 +#endif + +/* For now, support only big-endian */ +#define TARGET_BYTES_BIG_ENDIAN 1 +#define PPC_BIG_ENDIAN 1 + +/* Default CPU: */ +#define TARGET_CPU "powerpc" + +/* Permit temporary numeric labels. */ +#define LOCAL_LABELS_FB 1 + +/* $ is used to refer to the current location. */ +#define DOLLAR_DOT + +/* We don't need to handle .word strangely. */ +#define WORKING_DOT_WORD + +/* The name of the global offset table generated by the compiler. */ +#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_" + +#define tc_headers_hook(a) +#define tc_crawl_symbol_chain(a) +#define tc_aout_pre_write_hook(a) + +#define LISTING_HEADER "PowerPC GAS " + +#endif /* TC_POWERPC */ diff --git a/gnu/usr.bin/gas/config/tc-rs6000.c b/gnu/usr.bin/gas/config/tc-rs6000.c index e69de29bb2d..e6acdb72af2 100644 --- a/gnu/usr.bin/gas/config/tc-rs6000.c +++ b/gnu/usr.bin/gas/config/tc-rs6000.c @@ -0,0 +1,2 @@ +/* $OpenBSD: tc-rs6000.c,v 1.2 1998/02/15 18:49:43 niklas Exp $ */ + diff --git a/gnu/usr.bin/gas/config/tc-rs6000.h b/gnu/usr.bin/gas/config/tc-rs6000.h index e69de29bb2d..0f656262018 100644 --- a/gnu/usr.bin/gas/config/tc-rs6000.h +++ b/gnu/usr.bin/gas/config/tc-rs6000.h @@ -0,0 +1,2 @@ +/* $OpenBSD: tc-rs6000.h,v 1.2 1998/02/15 18:49:44 niklas Exp $ */ + diff --git a/gnu/usr.bin/gas/config/tc-sparc.h b/gnu/usr.bin/gas/config/tc-sparc.h index 3287a913308..e9a2e89161f 100644 --- a/gnu/usr.bin/gas/config/tc-sparc.h +++ b/gnu/usr.bin/gas/config/tc-sparc.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-sparc.h,v 1.3 1998/02/15 18:49:44 niklas Exp $ */ + /* tc-sparc.h - Macros and type defines for the sparc. Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: tc-sparc.h,v 1.2 1997/02/17 09:03:32 niklas Exp $ - */ - #define TC_SPARC 1 #define LOCAL_LABELS_FB diff --git a/gnu/usr.bin/gas/config/tc-tahoe.c b/gnu/usr.bin/gas/config/tc-tahoe.c index 68dc5b9fbb2..0816253a09c 100644 --- a/gnu/usr.bin/gas/config/tc-tahoe.c +++ b/gnu/usr.bin/gas/config/tc-tahoe.c @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-tahoe.c,v 1.2 1998/02/15 18:49:45 niklas Exp $ */ + /* tc-tahoe.c Not part of GAS yet. */ diff --git a/gnu/usr.bin/gas/config/tc-tahoe.h b/gnu/usr.bin/gas/config/tc-tahoe.h index e63cb63a881..0cff181c101 100644 --- a/gnu/usr.bin/gas/config/tc-tahoe.h +++ b/gnu/usr.bin/gas/config/tc-tahoe.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-tahoe.h,v 1.2 1998/02/15 18:49:46 niklas Exp $ */ + /* This file is tc-tahoe.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-vax.c b/gnu/usr.bin/gas/config/tc-vax.c index 9133c843635..73a674daca4 100644 --- a/gnu/usr.bin/gas/config/tc-vax.c +++ b/gnu/usr.bin/gas/config/tc-vax.c @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-vax.c,v 1.2 1998/02/15 18:49:47 niklas Exp $ */ + /* tc-vax.c - vax-specific - Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/tc-vax.h b/gnu/usr.bin/gas/config/tc-vax.h index 49c534e9385..2e65b96fbda 100644 --- a/gnu/usr.bin/gas/config/tc-vax.h +++ b/gnu/usr.bin/gas/config/tc-vax.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tc-vax.h,v 1.3 1998/02/15 18:49:47 niklas Exp $ */ + /* * This file is tc-vax.h. */ diff --git a/gnu/usr.bin/gas/config/te-dpx2.h b/gnu/usr.bin/gas/config/te-dpx2.h index 5f358a2bfd2..1b59968d0ae 100644 --- a/gnu/usr.bin/gas/config/te-dpx2.h +++ b/gnu/usr.bin/gas/config/te-dpx2.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-dpx2.h,v 1.2 1998/02/15 18:49:48 niklas Exp $ */ + /* Machine specific defines for the dpx2 machine */ #define dpx2 #define TC_M68K diff --git a/gnu/usr.bin/gas/config/te-generic.h b/gnu/usr.bin/gas/config/te-generic.h index 82adadbbfd8..a1d2f7f1b8f 100644 --- a/gnu/usr.bin/gas/config/te-generic.h +++ b/gnu/usr.bin/gas/config/te-generic.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-generic.h,v 1.2 1998/02/15 18:49:48 niklas Exp $ */ + /* * This file is te-generic.h and is intended to be a template for * target environment specific header files. @@ -5,10 +7,6 @@ * It is my intent that this file will evolve into a file suitable for config, * compile, and copying as an aid for testing and porting. xoxorich. */ -/* - * $Id: te-generic.h,v 1.1 1995/10/18 08:39:07 deraadt Exp $ - */ - #define TE_GENERIC 1 diff --git a/gnu/usr.bin/gas/config/te-hpux.h b/gnu/usr.bin/gas/config/te-hpux.h index 5458df69862..e6733a68df1 100644 --- a/gnu/usr.bin/gas/config/te-hpux.h +++ b/gnu/usr.bin/gas/config/te-hpux.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-hpux.h,v 1.2 1998/02/15 18:49:49 niklas Exp $ */ + /* Special version of <a.out.h> for use under hp-ux. Copyright (C) 1988, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/te-i386aix.h b/gnu/usr.bin/gas/config/te-i386aix.h index dcadbc379e8..df5e2d6f3a3 100644 --- a/gnu/usr.bin/gas/config/te-i386aix.h +++ b/gnu/usr.bin/gas/config/te-i386aix.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-i386aix.h,v 1.2 1998/02/15 18:49:49 niklas Exp $ */ + /* * This file is te-i386aix.h and is built from pieces of code from Minh Tran-Le * <TRANLE@INTELLICORP.COM> by rich@cygnus.com. diff --git a/gnu/usr.bin/gas/config/te-ic960.h b/gnu/usr.bin/gas/config/te-ic960.h index 4858c7deebe..e3ed45bf21c 100644 --- a/gnu/usr.bin/gas/config/te-ic960.h +++ b/gnu/usr.bin/gas/config/te-ic960.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-ic960.h,v 1.2 1998/02/15 18:49:50 niklas Exp $ */ + /* This file is twe-ic960.h Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/te-sco386.h b/gnu/usr.bin/gas/config/te-sco386.h index da8de1da36c..d6a8f3d3531 100644 --- a/gnu/usr.bin/gas/config/te-sco386.h +++ b/gnu/usr.bin/gas/config/te-sco386.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-sco386.h,v 1.2 1998/02/15 18:49:50 niklas Exp $ */ + /* Machine specific defines for the SCO Unix V.3.2 ODT */ #define scounix diff --git a/gnu/usr.bin/gas/config/te-sequent.h b/gnu/usr.bin/gas/config/te-sequent.h index fbf9d9ac8eb..4c3e3d5735f 100644 --- a/gnu/usr.bin/gas/config/te-sequent.h +++ b/gnu/usr.bin/gas/config/te-sequent.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-sequent.h,v 1.2 1998/02/15 18:49:51 niklas Exp $ */ + /* * This file is te-sequent.h and is intended to set up emulation with * sequent's development tools. diff --git a/gnu/usr.bin/gas/config/te-sun3.h b/gnu/usr.bin/gas/config/te-sun3.h index e559f283a9f..43608251158 100644 --- a/gnu/usr.bin/gas/config/te-sun3.h +++ b/gnu/usr.bin/gas/config/te-sun3.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-sun3.h,v 1.2 1998/02/15 18:49:51 niklas Exp $ */ + /* te-sun3.h -- Sun-3 target environment declarations. Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/config/te-sysv32.h b/gnu/usr.bin/gas/config/te-sysv32.h index 99702fb57c6..be1f5244339 100644 --- a/gnu/usr.bin/gas/config/te-sysv32.h +++ b/gnu/usr.bin/gas/config/te-sysv32.h @@ -1,3 +1,5 @@ +/* $OpenBSD: te-sysv32.h,v 1.2 1998/02/15 18:49:52 niklas Exp $ */ + /* Remove leading underscore from the gcc generated symbol names */ #define STRIP_UNDERSCORE diff --git a/gnu/usr.bin/gas/config/vax-inst.h b/gnu/usr.bin/gas/config/vax-inst.h index 1c101914221..68cbf090ce5 100644 --- a/gnu/usr.bin/gas/config/vax-inst.h +++ b/gnu/usr.bin/gas/config/vax-inst.h @@ -1,3 +1,5 @@ +/* $OpenBSD: vax-inst.h,v 1.2 1998/02/15 18:49:53 niklas Exp $ */ + /* vax-inst.h - GNU - Part of vax.c Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/configure.in b/gnu/usr.bin/gas/configure.in index 52f4b29f43b..ae04fe37f45 100644 --- a/gnu/usr.bin/gas/configure.in +++ b/gnu/usr.bin/gas/configure.in @@ -1,3 +1,5 @@ +# $OpenBSD: configure.in,v 1.2 1998/02/15 18:48:44 niklas Exp $ + # This file is configure.in # # Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/debug.c b/gnu/usr.bin/gas/debug.c index 1a82fe06f42..42b16c3b38b 100644 --- a/gnu/usr.bin/gas/debug.c +++ b/gnu/usr.bin/gas/debug.c @@ -1,3 +1,5 @@ +/* $OpenBSD: debug.c,v 1.2 1998/02/15 18:48:44 niklas Exp $ */ + /* This file is debug.c Copyright (C) 1987-1992 Free Software Foundation, Inc. @@ -21,7 +23,7 @@ /* Routines for debug use only. */ #ifndef lint -static char rcsid[] = "$Id: debug.c,v 1.1 1995/10/18 08:38:57 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: debug.c,v 1.2 1998/02/15 18:48:44 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/doc/Makefile.in b/gnu/usr.bin/gas/doc/Makefile.in index fdae0b28f40..bea1ea50067 100644 --- a/gnu/usr.bin/gas/doc/Makefile.in +++ b/gnu/usr.bin/gas/doc/Makefile.in @@ -1,3 +1,5 @@ +# $OpenBSD: Makefile.in,v 1.2 1998/02/15 18:49:54 niklas Exp $ + # Makefile for GNU Assembler documentation # - see pretex.m4 for discussion of preprocessor definitions # Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/doc/all.m4 b/gnu/usr.bin/gas/doc/all.m4 index 9205895c185..66bb7f3a75d 100644 --- a/gnu/usr.bin/gas/doc/all.m4 +++ b/gnu/usr.bin/gas/doc/all.m4 @@ -1,5 +1,5 @@ _divert__(-1) -<$Id: all.m4,v 1.1 1995/10/18 08:39:08 deraadt Exp $> +<$OpenBSD: all.m4,v 1.2 1998/02/15 18:49:55 niklas Exp $> _define__(<_ALL_ARCH__>,<1>) _define__(<_GENERIC__>,<1>) In case none.m4 changes its mind abt default diff --git a/gnu/usr.bin/gas/doc/as.texinfo b/gnu/usr.bin/gas/doc/as.texinfo index ce666058cfb..97fa400680f 100644 --- a/gnu/usr.bin/gas/doc/as.texinfo +++ b/gnu/usr.bin/gas/doc/as.texinfo @@ -1,6 +1,6 @@ _dnl__ -*-Texinfo-*- +_dnl__ $OpenBSD: as.texinfo,v 1.2 1998/02/15 18:49:56 niklas Exp $ _dnl__ Copyright (c) 1991 1992 Free Software Foundation, Inc. -_dnl__ $Id: as.texinfo,v 1.1 1995/10/18 08:39:08 deraadt Exp $ \input texinfo @c -*-Texinfo-*- @c Copyright (c) 1991 1992 Free Software Foundation, Inc. @c %**start of header @@ -86,7 +86,7 @@ done. @page @tex \def\$#1${{#1}} % Kluge: collect RCS revision info without $...$ -\xdef\manvers{\$Revision: 1.1 $} % For use in headers, footers too +\xdef\manvers{\$Revision: 1.2 $} % For use in headers, footers too {\parskip=0pt \hfill \manvers\par \hfill \TeX{}info \texinfoversion\par diff --git a/gnu/usr.bin/gas/doc/configure.in b/gnu/usr.bin/gas/doc/configure.in index f9820ea1903..e2fd68c8125 100644 --- a/gnu/usr.bin/gas/doc/configure.in +++ b/gnu/usr.bin/gas/doc/configure.in @@ -1,3 +1,5 @@ +# $OpenBSD: configure.in,v 1.2 1998/02/15 18:49:57 niklas Exp $ + # This file is configure.in # # Copyright (C) 1987-1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/doc/gen.m4 b/gnu/usr.bin/gas/doc/gen.m4 index 85bf151ea66..f55c0f5d0a6 100644 --- a/gnu/usr.bin/gas/doc/gen.m4 +++ b/gnu/usr.bin/gas/doc/gen.m4 @@ -1,5 +1,5 @@ _divert__(-1) -<$Id: gen.m4,v 1.1 1995/10/18 08:39:09 deraadt Exp $> +<$OpenBSD: gen.m4,v 1.2 1998/02/15 18:49:58 niklas Exp $> _define__(<_GENERIC__>,<1>) In case none.m4 changes its mind abt default _define__(<_AOUT__>,<1>) diff --git a/gnu/usr.bin/gas/doc/none.m4 b/gnu/usr.bin/gas/doc/none.m4 index 80bb5172cea..5d7f0a06a61 100644 --- a/gnu/usr.bin/gas/doc/none.m4 +++ b/gnu/usr.bin/gas/doc/none.m4 @@ -1,5 +1,5 @@ _divert__(-1) -<$Id: none.m4,v 1.1 1995/10/18 08:39:09 deraadt Exp $> +<$OpenBSD: none.m4,v 1.2 1998/02/15 18:49:59 niklas Exp $> Switches: diff --git a/gnu/usr.bin/gas/doc/pretex.m4 b/gnu/usr.bin/gas/doc/pretex.m4 index dcfd3b0966a..26d0d64f03c 100644 --- a/gnu/usr.bin/gas/doc/pretex.m4 +++ b/gnu/usr.bin/gas/doc/pretex.m4 @@ -1,8 +1,8 @@ +` $OpenBSD: pretex.m4,v 1.2 1998/02/15 18:49:59 niklas Exp $' divert(-1) -*-Text-*- ` Copyright (c) 1991 Free Software Foundation, Inc.' ` This file defines and documents the M4 macros used ' ` to preprocess some GNU manuals' -` $Id: pretex.m4,v 1.1 1995/10/18 08:39:09 deraadt Exp $' I. INTRODUCTION diff --git a/gnu/usr.bin/gas/doc/vintage.m4 b/gnu/usr.bin/gas/doc/vintage.m4 index e6ab49bdeac..aaba64d34e3 100644 --- a/gnu/usr.bin/gas/doc/vintage.m4 +++ b/gnu/usr.bin/gas/doc/vintage.m4 @@ -1,5 +1,5 @@ _divert__(-1) -<$Id: vintage.m4,v 1.1 1995/10/18 08:39:09 deraadt Exp $> +<$OpenBSD: vintage.m4,v 1.2 1998/02/15 18:50:00 niklas Exp $> _define__(<_ALL_ARCH__>,<1>) _define__(<_GENERIC__>,<1>) In case none.m4 changes its mind abt default diff --git a/gnu/usr.bin/gas/expr.c b/gnu/usr.bin/gas/expr.c index 5e33089b990..b7131483586 100644 --- a/gnu/usr.bin/gas/expr.c +++ b/gnu/usr.bin/gas/expr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: expr.c,v 1.2 1996/04/23 00:15:52 niklas Exp $ */ +/* $OpenBSD: expr.c,v 1.3 1998/02/15 18:48:45 niklas Exp $ */ /* expr.c -operands, expressions- Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -27,7 +27,7 @@ */ #ifndef lint -static char rcsid[] = "$OpenBSD: expr.c,v 1.2 1996/04/23 00:15:52 niklas Exp $"; +static char rcsid[] = "$OpenBSD: expr.c,v 1.3 1998/02/15 18:48:45 niklas Exp $"; #endif #include <ctype.h> @@ -523,6 +523,7 @@ register expressionS *expressionP; || (expressionP->X_subtract_symbol && expressionP->X_add_symbol && expressionP->X_subtract_symbol->sy_frag == expressionP->X_add_symbol->sy_frag + && SEG_NORMAL (S_GET_SEGMENT (expressionP->X_add_symbol)) && S_GET_VALUE(expressionP->X_subtract_symbol) == S_GET_VALUE(expressionP->X_add_symbol))) { expressionP->X_subtract_symbol = NULL; expressionP->X_add_symbol = NULL; @@ -742,7 +743,9 @@ segT expr(rank, resultP) register operatorT op_right; register char c_right; +#ifndef __CHAR_UNSIGNED__ know(rank >= 0); +#endif (void) operand(resultP); know(*input_line_pointer != ' '); /* Operand() gobbles spaces. */ c_left = *input_line_pointer; /* Potential operator character. */ diff --git a/gnu/usr.bin/gas/expr.h b/gnu/usr.bin/gas/expr.h index 543f46e9eed..a4e5165c356 100644 --- a/gnu/usr.bin/gas/expr.h +++ b/gnu/usr.bin/gas/expr.h @@ -1,3 +1,5 @@ +/* $OpenBSD: expr.h,v 1.2 1998/02/15 18:48:45 niklas Exp $ */ + /* expr.h -> header file for expr.c Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -16,10 +18,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: expr.h,v 1.1 1995/10/18 08:38:57 deraadt Exp $ - */ - /* * Abbreviations (mnemonics). diff --git a/gnu/usr.bin/gas/flo-const.c b/gnu/usr.bin/gas/flo-const.c index ac5c4b02d4f..b61dea4ed1c 100644 --- a/gnu/usr.bin/gas/flo-const.c +++ b/gnu/usr.bin/gas/flo-const.c @@ -1,3 +1,5 @@ +/* $OpenBSD: flo-const.c,v 1.2 1998/02/15 18:48:46 niklas Exp $ */ + /* flonum_const.c - Useful Flonum constants Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: flo-const.c,v 1.1 1995/10/18 08:38:57 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: flo-const.c,v 1.2 1998/02/15 18:48:46 niklas Exp $"; #endif #include "flonum.h" diff --git a/gnu/usr.bin/gas/flo-copy.c b/gnu/usr.bin/gas/flo-copy.c index de7f84b0c25..6f758cf1a29 100644 --- a/gnu/usr.bin/gas/flo-copy.c +++ b/gnu/usr.bin/gas/flo-copy.c @@ -1,3 +1,5 @@ +/* $OpenBSD: flo-copy.c,v 1.2 1998/02/15 18:48:47 niklas Exp $ */ + /* flonum_copy.c - copy a flonum Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: flo-copy.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: flo-copy.c,v 1.2 1998/02/15 18:48:47 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/flonum-mult.c b/gnu/usr.bin/gas/flonum-mult.c index bc9349f3dbc..2be2939adf5 100644 --- a/gnu/usr.bin/gas/flonum-mult.c +++ b/gnu/usr.bin/gas/flonum-mult.c @@ -1,3 +1,5 @@ +/* $OpenBSD: flonum-mult.c,v 1.2 1998/02/15 18:48:47 niklas Exp $ */ + /* flonum_mult.c - multiply two flonums Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -19,7 +21,7 @@ notice and this notice must be preserved on all copies. */ #ifndef lint -static char rcsid[] = "$Id: flonum-mult.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: flonum-mult.c,v 1.2 1998/02/15 18:48:47 niklas Exp $"; #endif #include "flonum.h" diff --git a/gnu/usr.bin/gas/flonum.h b/gnu/usr.bin/gas/flonum.h index 23b85d418ff..439e71d1d27 100644 --- a/gnu/usr.bin/gas/flonum.h +++ b/gnu/usr.bin/gas/flonum.h @@ -1,3 +1,5 @@ +/* $OpenBSD: flonum.h,v 1.2 1998/02/15 18:48:48 niklas Exp $ */ + /* flonum.h - Floating point package Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: flonum.h,v 1.1 1995/10/18 08:38:58 deraadt Exp $ - */ - /***********************************************************************\ * * diff --git a/gnu/usr.bin/gas/frags.c b/gnu/usr.bin/gas/frags.c index 4e28f6a0234..81ab2000dd8 100644 --- a/gnu/usr.bin/gas/frags.c +++ b/gnu/usr.bin/gas/frags.c @@ -1,3 +1,5 @@ +/* $OpenBSD: frags.c,v 1.2 1998/02/15 18:48:48 niklas Exp $ */ + /* frags.c - manage frags - Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -19,7 +21,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: frags.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: frags.c,v 1.2 1998/02/15 18:48:48 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/frags.h b/gnu/usr.bin/gas/frags.h index b4966d70627..6d247e5bbc0 100644 --- a/gnu/usr.bin/gas/frags.h +++ b/gnu/usr.bin/gas/frags.h @@ -1,3 +1,5 @@ +/* $OpenBSD: frags.h,v 1.2 1998/02/15 18:48:49 niklas Exp $ */ + /* frags.h - Header file for the frag concept. Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: frags.h,v 1.1 1995/10/18 08:38:58 deraadt Exp $ - */ - extern struct obstack frags; /* Frags ONLY live in this obstack. */ diff --git a/gnu/usr.bin/gas/hash.c b/gnu/usr.bin/gas/hash.c index 75181c36a4f..c0014f3b273 100644 --- a/gnu/usr.bin/gas/hash.c +++ b/gnu/usr.bin/gas/hash.c @@ -1,3 +1,5 @@ +/* $OpenBSD: hash.c,v 1.2 1998/02/15 18:48:49 niklas Exp $ */ + /* hash.c - hash table lookup strings - Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -123,7 +125,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: hash.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: hash.c,v 1.2 1998/02/15 18:48:49 niklas Exp $"; #endif #include <stdio.h> diff --git a/gnu/usr.bin/gas/hash.h b/gnu/usr.bin/gas/hash.h index cac89404155..4cb99cd27c8 100644 --- a/gnu/usr.bin/gas/hash.h +++ b/gnu/usr.bin/gas/hash.h @@ -1,3 +1,5 @@ +/* $OpenBSD: hash.h,v 1.2 1998/02/15 18:48:50 niklas Exp $ */ + /* hash.h - for hash.c Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -16,10 +18,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: hash.h,v 1.1 1995/10/18 08:38:58 deraadt Exp $ - */ - #ifndef hashH #define hashH diff --git a/gnu/usr.bin/gas/hex-value.c b/gnu/usr.bin/gas/hex-value.c index 2764c63adda..99e7b3e6f13 100644 --- a/gnu/usr.bin/gas/hex-value.c +++ b/gnu/usr.bin/gas/hex-value.c @@ -1,3 +1,5 @@ +/* $OpenBSD: hex-value.c,v 1.2 1998/02/15 18:48:50 niklas Exp $ */ + /* hex_value.c - char=>radix-value - Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -23,7 +25,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: hex-value.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: hex-value.c,v 1.2 1998/02/15 18:48:50 niklas Exp $"; #endif #define __ (42) /* blatently illegal digit value */ diff --git a/gnu/usr.bin/gas/input-file.c b/gnu/usr.bin/gas/input-file.c index 8f6c7201fe8..ab5302d6ba8 100644 --- a/gnu/usr.bin/gas/input-file.c +++ b/gnu/usr.bin/gas/input-file.c @@ -1,3 +1,5 @@ +/* $OpenBSD: input-file.c,v 1.2 1998/02/15 18:48:51 niklas Exp $ */ + /* input_file.c - Deal with Input Files - Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -25,7 +27,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: input-file.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: input-file.c,v 1.2 1998/02/15 18:48:51 niklas Exp $"; #endif #ifdef USG diff --git a/gnu/usr.bin/gas/input-file.h b/gnu/usr.bin/gas/input-file.h index 525d071a3e0..e7459a626c6 100644 --- a/gnu/usr.bin/gas/input-file.h +++ b/gnu/usr.bin/gas/input-file.h @@ -1,3 +1,5 @@ +/* $OpenBSD: input-file.h,v 1.2 1998/02/15 18:48:52 niklas Exp $ */ + /* input_file.h header for input-file.c Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -20,11 +22,6 @@ /*"input_file.c":Operating-system dependant functions to read source files.*/ /* - * $Id: input-file.h,v 1.1 1995/10/18 08:38:58 deraadt Exp $ - */ - - -/* * No matter what the operating system, this module must provide the * following services to its callers. * diff --git a/gnu/usr.bin/gas/input-scrub.c b/gnu/usr.bin/gas/input-scrub.c index e7a22e6a0c9..b1543358400 100644 --- a/gnu/usr.bin/gas/input-scrub.c +++ b/gnu/usr.bin/gas/input-scrub.c @@ -1,3 +1,5 @@ +/* $OpenBSD: input-scrub.c,v 1.2 1998/02/15 18:48:53 niklas Exp $ */ + /* input_scrub.c - Break up input buffers into whole numbers of lines. Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: input-scrub.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: input-scrub.c,v 1.2 1998/02/15 18:48:53 niklas Exp $"; #endif #include <errno.h> /* Need this to make errno declaration right */ diff --git a/gnu/usr.bin/gas/listing.c b/gnu/usr.bin/gas/listing.c index 1ff88977e81..ddecabb0e7e 100644 --- a/gnu/usr.bin/gas/listing.c +++ b/gnu/usr.bin/gas/listing.c @@ -1,3 +1,5 @@ +/* $OpenBSD: listing.c,v 1.2 1998/02/15 18:48:53 niklas Exp $ */ + /* listing.c - mainting assembly listings Copyright (C) 1991, 1992 Free Software Foundation, Inc. @@ -92,7 +94,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ */ #ifndef lint -static char rcsid[] = "$Id: listing.c,v 1.1 1995/10/18 08:38:58 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: listing.c,v 1.2 1998/02/15 18:48:53 niklas Exp $"; #endif #include <ctype.h> diff --git a/gnu/usr.bin/gas/listing.h b/gnu/usr.bin/gas/listing.h index 622831765ae..0a31f6d2d01 100644 --- a/gnu/usr.bin/gas/listing.h +++ b/gnu/usr.bin/gas/listing.h @@ -1,3 +1,5 @@ +/* $OpenBSD: listing.h,v 1.2 1998/02/15 18:48:54 niklas Exp $ */ + /* This file is listing.h Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: listing.h,v 1.1 1995/10/18 08:38:59 deraadt Exp $ - */ - #ifndef __listing_h__ #define __listing_h__ diff --git a/gnu/usr.bin/gas/messages.c b/gnu/usr.bin/gas/messages.c index 49afddeeec2..d69d357bddd 100644 --- a/gnu/usr.bin/gas/messages.c +++ b/gnu/usr.bin/gas/messages.c @@ -1,3 +1,5 @@ +/* $OpenBSD: messages.c,v 1.2 1998/02/15 18:48:55 niklas Exp $ */ + /* messages.c - error reporter - Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. @@ -18,7 +20,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: messages.c,v 1.1 1995/10/18 08:38:59 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: messages.c,v 1.2 1998/02/15 18:48:55 niklas Exp $"; #endif #include <stdio.h> diff --git a/gnu/usr.bin/gas/obj.h b/gnu/usr.bin/gas/obj.h index 5e5bf7a6f30..a851553691e 100644 --- a/gnu/usr.bin/gas/obj.h +++ b/gnu/usr.bin/gas/obj.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obj.h,v 1.2 1998/02/15 18:48:55 niklas Exp $ */ + /* obj.h - defines the object dependent hooks for all object format backends. @@ -18,10 +20,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: obj.h,v 1.1 1995/10/18 08:38:57 deraadt Exp $ - */ - #if __STDC__ == 1 diff --git a/gnu/usr.bin/gas/obstack.c b/gnu/usr.bin/gas/obstack.c index 19e1b67e13f..798f1630295 100644 --- a/gnu/usr.bin/gas/obstack.c +++ b/gnu/usr.bin/gas/obstack.c @@ -1,3 +1,5 @@ +/* $OpenBSD: obstack.c,v 1.2 1998/02/15 18:48:56 niklas Exp $ */ + /* obstack.c - subroutines used implicitly by object stack macros Copyright (C) 1988 Free Software Foundation, Inc. @@ -16,7 +18,7 @@ along with this program; if not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: obstack.c,v 1.1 1995/10/18 08:38:59 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: obstack.c,v 1.2 1998/02/15 18:48:56 niklas Exp $"; #endif #include "obstack.h" diff --git a/gnu/usr.bin/gas/obstack.h b/gnu/usr.bin/gas/obstack.h index 1e76c788c0e..ba80d85f384 100644 --- a/gnu/usr.bin/gas/obstack.h +++ b/gnu/usr.bin/gas/obstack.h @@ -1,3 +1,5 @@ +/* $OpenBSD: obstack.h,v 1.2 1998/02/15 18:48:56 niklas Exp $ */ + /* obstack.h - object stack macros Copyright (C) 1988 Free Software Foundation, Inc. @@ -14,10 +16,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: obstack.h,v 1.1 1995/10/18 08:38:59 deraadt Exp $ - */ - /* Summary: diff --git a/gnu/usr.bin/gas/opcode/a29k.h b/gnu/usr.bin/gas/opcode/a29k.h index 82bb4d2c199..33f79f15e7e 100644 --- a/gnu/usr.bin/gas/opcode/a29k.h +++ b/gnu/usr.bin/gas/opcode/a29k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: a29k.h,v 1.2 1998/02/15 18:50:01 niklas Exp $ */ + /* Table of opcodes for the AMD 29000 Copyright (C) 1990, 1991 Free Software Foundation, Inc. @@ -285,8 +287,11 @@ CONST unsigned int num_opcodes = (((sizeof a29k_opcodes) / (sizeof a29k_opcodes[ /* * $Log: a29k.h,v $ - * Revision 1.1 1995/10/18 08:39:09 deraadt - * Initial revision + * Revision 1.2 1998/02/15 18:50:01 niklas + * Merge of NetBSD changes + $OpenBSD$ tags + * + * Revision 1.1.1.1 1995/10/18 08:39:09 deraadt + * initial import of NetBSD tree * * Revision 1.1 1993/10/02 21:00:40 pk * GNU gas 1.92.3 based assembler supporting PIC code (for i386 and sparc). diff --git a/gnu/usr.bin/gas/opcode/h8300.h b/gnu/usr.bin/gas/opcode/h8300.h index f4702a8f2f1..1fe082976ef 100644 --- a/gnu/usr.bin/gas/opcode/h8300.h +++ b/gnu/usr.bin/gas/opcode/h8300.h @@ -1,3 +1,5 @@ +/* $OpenBSD: h8300.h,v 1.2 1998/02/15 18:50:02 niklas Exp $ */ + /* Opcode table for the H8-300 Copyright (C) 1991,1992 Free Software Foundation. Written by Steve Chamberlain, sac@cygnus.com. diff --git a/gnu/usr.bin/gas/opcode/i386.h b/gnu/usr.bin/gas/opcode/i386.h index d46a44fd5de..66d806c4358 100644 --- a/gnu/usr.bin/gas/opcode/i386.h +++ b/gnu/usr.bin/gas/opcode/i386.h @@ -1,3 +1,4 @@ +/* $OpenBSD: i386.h,v 1.4 1998/02/15 18:50:02 niklas Exp $ */ /* i386-opcode.h -- Intel 80386 opcode table Copyright (C) 1989, 1991, Free Software Foundation. @@ -17,7 +18,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: i386.h,v 1.3 1997/09/04 22:27:28 chuck Exp $ */ static const template i386_optab[] = { @@ -732,6 +732,46 @@ static const template i386_optab[] = { /* Pentium extensions */ {"cpuid", 0, 0x0fa2, _, NoModrm, 0, 0, 0}, +/* Pentium extensions */ +{"wrmsr", 0, 0x0f30, _, NoModrm, 0, 0, 0}, +{"rdtsc", 0, 0x0f31, _, NoModrm, 0, 0, 0}, +{"rdmsr", 0, 0x0f32, _, NoModrm, 0, 0, 0}, +{"cmpxchg8b", 1, 0x0fc7, 1, Modrm, Mem, 0, 0}, + +/* Pentium Pro extensions */ +{"rdpmc", 0, 0x0f33, _, NoModrm, 0, 0, 0}, + +{"cmovo", 2, 0x0f40, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovno", 2, 0x0f41, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovb", 2, 0x0f42, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovae", 2, 0x0f43, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmove", 2, 0x0f44, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovne", 2, 0x0f45, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovbe", 2, 0x0f46, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmova", 2, 0x0f47, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovs", 2, 0x0f48, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovns", 2, 0x0f49, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovp", 2, 0x0f4a, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovnp", 2, 0x0f4b, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovl", 2, 0x0f4c, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovge", 2, 0x0f4d, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovle", 2, 0x0f4e, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, +{"cmovg", 2, 0x0f4f, _, W|Modrm|ReverseRegRegmem, WordReg|WordMem, WordReg, 0}, + +{"fcmovb", 2, 0xdac0, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmove", 2, 0xdac8, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmovbe",2, 0xdad0, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmovu", 2, 0xdad8, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmovnb", 2, 0xdbc0, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmovne", 2, 0xdbc8, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmovnbe",2, 0xdbd0, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcmovnu", 2, 0xdbd8, _, ShortForm, FloatReg, FloatAcc, 0}, + +{"fcomi", 2, 0xdbf0, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fucomi", 2, 0xdbe8, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fcomip", 2, 0xdff0, _, ShortForm, FloatReg, FloatAcc, 0}, +{"fucomip",2, 0xdfe8, _, ShortForm, FloatReg, FloatAcc, 0}, + {"", 0, 0, 0, 0, 0, 0, 0} /* sentinal */ }; #undef _ diff --git a/gnu/usr.bin/gas/opcode/i860.h b/gnu/usr.bin/gas/opcode/i860.h index 0842786d349..0374b03ae2c 100644 --- a/gnu/usr.bin/gas/opcode/i860.h +++ b/gnu/usr.bin/gas/opcode/i860.h @@ -1,3 +1,5 @@ +/* $OpenBSD: i860.h,v 1.2 1998/02/15 18:50:03 niklas Exp $ */ + /* Table of opcodes for the i860. Copyright (C) 1989 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/opcode/i960.h b/gnu/usr.bin/gas/opcode/i960.h index 3be57356c7a..ba8a6270de3 100644 --- a/gnu/usr.bin/gas/opcode/i960.h +++ b/gnu/usr.bin/gas/opcode/i960.h @@ -1,3 +1,4 @@ +/* $OpenBSD: i960.h,v 1.2 1998/02/15 18:50:03 niklas Exp $ */ /* Basic 80960 instruction formats. * * The 'COJ' instructions are actually COBR instructions with the 'b' in @@ -18,7 +19,6 @@ * appropriate. */ -/* $Id: i960.h,v 1.1 1995/10/18 08:39:09 deraadt Exp $ */ #define CTRL 0 #define COBR 1 diff --git a/gnu/usr.bin/gas/opcode/m68k.h b/gnu/usr.bin/gas/opcode/m68k.h index 2df55725bab..89edc800c1d 100644 --- a/gnu/usr.bin/gas/opcode/m68k.h +++ b/gnu/usr.bin/gas/opcode/m68k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: m68k.h,v 1.2 1998/02/15 18:50:04 niklas Exp $ */ + /* Opcode table for m680[01234]0/m6888[12]/m68851. Copyright (C) 1989, 1991 Free Software Foundation. diff --git a/gnu/usr.bin/gas/opcode/m88k.h b/gnu/usr.bin/gas/opcode/m88k.h index 62f847512a3..8eede94cd6e 100644 --- a/gnu/usr.bin/gas/opcode/m88k.h +++ b/gnu/usr.bin/gas/opcode/m88k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: m88k.h,v 1.3 1998/02/15 18:50:05 niklas Exp $ */ + /* m88k-opcode.h -- Instruction information for the Motorola 88000 Contributed by Devon Bowen of Buffalo University and Torbjorn Granlund of the Swedish Institute of Computer Science. diff --git a/gnu/usr.bin/gas/opcode/mips.h b/gnu/usr.bin/gas/opcode/mips.h index a65678a941d..af9f2db137d 100644 --- a/gnu/usr.bin/gas/opcode/mips.h +++ b/gnu/usr.bin/gas/opcode/mips.h @@ -1,3 +1,5 @@ +/* $OpenBSD: mips.h,v 1.2 1998/02/15 18:50:05 niklas Exp $ */ + /* Mips opcde list for GDB, the GNU debugger. Copyright (C) 1989 Free Software Foundation, Inc. Contributed by Nobuyuki Hikichi(hikichi@sra.junet) diff --git a/gnu/usr.bin/gas/opcode/np1.h b/gnu/usr.bin/gas/opcode/np1.h index 654682570fa..528b9fca100 100644 --- a/gnu/usr.bin/gas/opcode/np1.h +++ b/gnu/usr.bin/gas/opcode/np1.h @@ -1,3 +1,5 @@ +/* $OpenBSD: np1.h,v 1.2 1998/02/15 18:50:06 niklas Exp $ */ + /* Print GOULD NPL instructions for GDB, the GNU debugger. Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/opcode/ns32k.h b/gnu/usr.bin/gas/opcode/ns32k.h index 2a7621a9ca3..0653ec1d156 100644 --- a/gnu/usr.bin/gas/opcode/ns32k.h +++ b/gnu/usr.bin/gas/opcode/ns32k.h @@ -1,3 +1,5 @@ +/* $OpenBSD: ns32k.h,v 1.2 1998/02/15 18:50:06 niklas Exp $ */ + /* ns32k-opcode.h -- Opcode table for National Semi 32k processor Copyright (C) 1987 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/opcode/pn.h b/gnu/usr.bin/gas/opcode/pn.h index fde4764c02c..0e82f928fe4 100644 --- a/gnu/usr.bin/gas/opcode/pn.h +++ b/gnu/usr.bin/gas/opcode/pn.h @@ -1,3 +1,5 @@ +/* $OpenBSD: pn.h,v 1.2 1998/02/15 18:50:07 niklas Exp $ */ + /* Print GOULD PN (PowerNode) instructions for GDB, the GNU debugger. Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/opcode/ppc.h b/gnu/usr.bin/gas/opcode/ppc.h new file mode 100644 index 00000000000..e1e4de47eef --- /dev/null +++ b/gnu/usr.bin/gas/opcode/ppc.h @@ -0,0 +1,3075 @@ +/* $OpenBSD: ppc.h,v 1.1 1998/02/15 18:50:07 niklas Exp $ */ + +/* ppc.h -- Header file for PowerPC opcode table + Copyright 1994, 1995 Free Software Foundation, Inc. + Written by Ian Lance Taylor, Cygnus Support + +This file is part of GDB, GAS, and the GNU binutils. + +GDB, GAS, and the GNU binutils are free software; you can redistribute +them and/or modify them under the terms of the GNU General Public +License as published by the Free Software Foundation; either version +1, or (at your option) any later version. + +GDB, GAS, and the GNU binutils are distributed in the hope that they +will be useful, but WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this file; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef PPC_H +#define PPC_H + +/* The opcode table is an array of struct powerpc_opcode. */ + +struct powerpc_opcode +{ + /* The opcode name. */ + const char *name; + + /* The opcode itself. Those bits which will be filled in with + operands are zeroes. */ + unsigned long opcode; + + /* The opcode mask. This is used by the disassembler. This is a + mask containing ones indicating those bits which must match the + opcode field, and zeroes indicating those bits which need not + match (and are presumably filled in by operands). */ + unsigned long mask; + + /* One bit flags for the opcode. These are used to indicate which + specific processors support the instructions. The defined values + are listed below. */ + unsigned long flags; + + /* An array of operand codes. Each code is an index into the + operand table. They appear in the order which the operands must + appear in assembly code, and are terminated by a zero. */ + unsigned char operands[8]; +}; + +/* The table itself is sorted by major opcode number, and is otherwise + in the order in which the disassembler should consider + instructions. */ +extern const struct powerpc_opcode powerpc_opcodes[]; +extern const int powerpc_num_opcodes; + +/* Values defined for the flags field of a struct powerpc_opcode. */ + +/* Opcode is defined for the PowerPC architecture. */ +#define PPC_OPCODE_PPC (01) + +/* Opcode is defined for the POWER (RS/6000) architecture. */ +#define PPC_OPCODE_POWER (02) + +/* Opcode is defined for the POWER2 (Rios 2) architecture. */ +#define PPC_OPCODE_POWER2 (04) + +/* Opcode is only defined on 32 bit architectures. */ +#define PPC_OPCODE_32 (010) + +/* Opcode is only defined on 64 bit architectures. */ +#define PPC_OPCODE_64 (020) + +/* Opcode is supported by the Motorola PowerPC 601 processor. The 601 + is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions, + but it also supports many additional POWER instructions. */ +#define PPC_OPCODE_601 (040) + +/* Opcode is supported in both the Power and PowerPC architectures + (ie, compiler's -mcpu=common or assembler's -mcom). */ +#define PPC_OPCODE_COMMON (0100) + +/* Opcode is supported for any Power or PowerPC platform (this is + for the assembler's -many option, and it eliminates duplicates). */ +#define PPC_OPCODE_ANY (0200) + +/* A macro to extract the major opcode from an instruction. */ +#define PPC_OP(i) (((i) >> 26) & 0x3f) + +/* The operands table is an array of struct powerpc_operand. */ + +struct powerpc_operand +{ + /* The number of bits in the operand. */ + int bits; + + /* How far the operand is left shifted in the instruction. */ + int shift; + + /* Insertion function. This is used by the assembler. To insert an + operand value into an instruction, check this field. + + If it is NULL, execute + i |= (op & ((1 << o->bits) - 1)) << o->shift; + (i is the instruction which we are filling in, o is a pointer to + this structure, and op is the opcode value; this assumes twos + complement arithmetic). + + If this field is not NULL, then simply call it with the + instruction and the operand value. It will return the new value + of the instruction. If the ERRMSG argument is not NULL, then if + the operand value is illegal, *ERRMSG will be set to a warning + string (the operand will be inserted in any case). If the + operand value is legal, *ERRMSG will be unchanged (most operands + can accept any value). */ + unsigned long (*insert) PARAMS ((unsigned long instruction, long op, + const char **errmsg)); + + /* Extraction function. This is used by the disassembler. To + extract this operand type from an instruction, check this field. + + If it is NULL, compute + op = ((i) >> o->shift) & ((1 << o->bits) - 1); + if ((o->flags & PPC_OPERAND_SIGNED) != 0 + && (op & (1 << (o->bits - 1))) != 0) + op -= 1 << o->bits; + (i is the instruction, o is a pointer to this structure, and op + is the result; this assumes twos complement arithmetic). + + If this field is not NULL, then simply call it with the + instruction value. It will return the value of the operand. If + the INVALID argument is not NULL, *INVALID will be set to + non-zero if this operand type can not actually be extracted from + this operand (i.e., the instruction does not match). If the + operand is valid, *INVALID will not be changed. */ + long (*extract) PARAMS ((unsigned long instruction, int *invalid)); + + /* One bit syntax flags. */ + unsigned long flags; +}; + +/* Elements in the table are retrieved by indexing with values from + the operands field of the powerpc_opcodes table. */ + +extern const struct powerpc_operand powerpc_operands[]; + +/* Values defined for the flags field of a struct powerpc_operand. */ + +/* This operand takes signed values. */ +#define PPC_OPERAND_SIGNED (01) + +/* This operand takes signed values, but also accepts a full positive + range of values when running in 32 bit mode. That is, if bits is + 16, it takes any value from -0x8000 to 0xffff. In 64 bit mode, + this flag is ignored. */ +#define PPC_OPERAND_SIGNOPT (02) + +/* This operand does not actually exist in the assembler input. This + is used to support extended mnemonics such as mr, for which two + operands fields are identical. The assembler should call the + insert function with any op value. The disassembler should call + the extract function, ignore the return value, and check the value + placed in the valid argument. */ +#define PPC_OPERAND_FAKE (04) + +/* The next operand should be wrapped in parentheses rather than + separated from this one by a comma. This is used for the load and + store instructions which want their operands to look like + reg,displacement(reg) + */ +#define PPC_OPERAND_PARENS (010) + +/* This operand may use the symbolic names for the CR fields, which + are + lt 0 gt 1 eq 2 so 3 un 3 + cr0 0 cr1 1 cr2 2 cr3 3 + cr4 4 cr5 5 cr6 6 cr7 7 + These may be combined arithmetically, as in cr2*4+gt. These are + only supported on the PowerPC, not the POWER. */ +#define PPC_OPERAND_CR (020) + +/* This operand names a register. The disassembler uses this to print + register names with a leading 'r'. */ +#define PPC_OPERAND_GPR (040) + +/* This operand names a floating point register. The disassembler + prints these with a leading 'f'. */ +#define PPC_OPERAND_FPR (0100) + +/* This operand is a relative branch displacement. The disassembler + prints these symbolically if possible. */ +#define PPC_OPERAND_RELATIVE (0200) + +/* This operand is an absolute branch address. The disassembler + prints these symbolically if possible. */ +#define PPC_OPERAND_ABSOLUTE (0400) + +/* This operand is optional, and is zero if omitted. This is used for + the optional BF and L fields in the comparison instructions. The + assembler must count the number of operands remaining on the line, + and the number of operands remaining for the opcode, and decide + whether this operand is present or not. The disassembler should + print this operand out only if it is not zero. */ +#define PPC_OPERAND_OPTIONAL (01000) + +/* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand + is omitted, then for the next operand use this operand value plus + 1, ignoring the next operand field for the opcode. This wretched + hack is needed because the Power rotate instructions can take + either 4 or 5 operands. The disassembler should print this operand + out regardless of the PPC_OPERAND_OPTIONAL field. */ +#define PPC_OPERAND_NEXT (02000) + +/* This operand should be regarded as a negative number for the + purposes of overflow checking (i.e., the normal most negative + number is disallowed and one more than the normal most positive + number is allowed). This flag will only be set for a signed + operand. */ +#define PPC_OPERAND_NEGATIVE (04000) + +/* The POWER and PowerPC assemblers use a few macros. We keep them + with the operands table for simplicity. The macro table is an + array of struct powerpc_macro. */ + +struct powerpc_macro +{ + /* The macro name. */ + const char *name; + + /* The number of operands the macro takes. */ + unsigned int operands; + + /* One bit flags for the opcode. These are used to indicate which + specific processors support the instructions. The values are the + same as those for the struct powerpc_opcode flags field. */ + unsigned long flags; + + /* A format string to turn the macro into a normal instruction. + Each %N in the string is replaced with operand number N (zero + based). */ + const char *format; +}; + +extern const struct powerpc_macro powerpc_macros[]; +extern const int powerpc_num_macros; + +/* ppc-opc.c -- PowerPC opcode list + Copyright 1994 Free Software Foundation, Inc. + Written by Ian Lance Taylor, Cygnus Support + +This file is part of GDB, GAS, and the GNU binutils. + +GDB, GAS, and the GNU binutils are free software; you can redistribute +them and/or modify them under the terms of the GNU General Public +License as published by the Free Software Foundation; either version +2, or (at your option) any later version. + +GDB, GAS, and the GNU binutils are distributed in the hope that they +will be useful, but WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this file; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* +#include <stdio.h> +#include "ansidecl.h" +#include "opcode/ppc.h" +*/ +/* This file holds the PowerPC opcode table. The opcode table + includes almost all of the extended instruction mnemonics. This + permits the disassembler to use them, and simplifies the assembler + logic, at the cost of increasing the table size. The table is + strictly constant data, so the compiler should be able to put it in + the .text section. + + This file also holds the operand table. All knowledge about + inserting operands into instructions and vice-versa is kept in this + file. */ + +/* Local insertion and extraction functions. */ + +static unsigned long insert_bat PARAMS ((unsigned long, long, const char **)); +static long extract_bat PARAMS ((unsigned long, int *)); +static unsigned long insert_bba PARAMS ((unsigned long, long, const char **)); +static long extract_bba PARAMS ((unsigned long, int *)); +static unsigned long insert_bd PARAMS ((unsigned long, long, const char **)); +static long extract_bd PARAMS ((unsigned long, int *)); +static unsigned long insert_bdm PARAMS ((unsigned long, long, const char **)); +static long extract_bdm PARAMS ((unsigned long, int *)); +static unsigned long insert_bdp PARAMS ((unsigned long, long, const char **)); +static long extract_bdp PARAMS ((unsigned long, int *)); +static unsigned long insert_bo PARAMS ((unsigned long, long, const char **)); +static long extract_bo PARAMS ((unsigned long, int *)); +static unsigned long insert_boe PARAMS ((unsigned long, long, const char **)); +static long extract_boe PARAMS ((unsigned long, int *)); +static unsigned long insert_ds PARAMS ((unsigned long, long, const char **)); +static long extract_ds PARAMS ((unsigned long, int *)); +static unsigned long insert_li PARAMS ((unsigned long, long, const char **)); +static long extract_li PARAMS ((unsigned long, int *)); +static unsigned long insert_mbe PARAMS ((unsigned long, long, const char **)); +static long extract_mbe PARAMS ((unsigned long, int *)); +static unsigned long insert_mb6 PARAMS ((unsigned long, long, const char **)); +static long extract_mb6 PARAMS ((unsigned long, int *)); +static unsigned long insert_nb PARAMS ((unsigned long, long, const char **)); +static long extract_nb PARAMS ((unsigned long, int *)); +static unsigned long insert_nsi PARAMS ((unsigned long, long, const char **)); +static long extract_nsi PARAMS ((unsigned long, int *)); +static unsigned long insert_ral PARAMS ((unsigned long, long, const char **)); +static unsigned long insert_ram PARAMS ((unsigned long, long, const char **)); +static unsigned long insert_ras PARAMS ((unsigned long, long, const char **)); +static unsigned long insert_rbs PARAMS ((unsigned long, long, const char **)); +static long extract_rbs PARAMS ((unsigned long, int *)); +static unsigned long insert_sh6 PARAMS ((unsigned long, long, const char **)); +static long extract_sh6 PARAMS ((unsigned long, int *)); +static unsigned long insert_spr PARAMS ((unsigned long, long, const char **)); +static long extract_spr PARAMS ((unsigned long, int *)); +static unsigned long insert_tbr PARAMS ((unsigned long, long, const char **)); +static long extract_tbr PARAMS ((unsigned long, int *)); + +/* The operands table. + + The fields are bits, shift, signed, insert, extract, flags. */ + +const struct powerpc_operand powerpc_operands[] = +{ + /* The zero index is used to indicate the end of the list of + operands. */ +#define UNUSED (0) + { 0, 0, 0, 0, 0 }, + + /* The BA field in an XL form instruction. */ +#define BA (UNUSED + 1) +#define BA_MASK (0x1f << 16) + { 5, 16, 0, 0, PPC_OPERAND_CR }, + + /* The BA field in an XL form instruction when it must be the same + as the BT field in the same instruction. */ +#define BAT (BA + 1) + { 5, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE }, + + /* The BB field in an XL form instruction. */ +#define BB (BAT + 1) +#define BB_MASK (0x1f << 11) + { 5, 11, 0, 0, PPC_OPERAND_CR }, + + /* The BB field in an XL form instruction when it must be the same + as the BA field in the same instruction. */ +#define BBA (BB + 1) + { 5, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE }, + + /* The BD field in a B form instruction. The lower two bits are + forced to zero. */ +#define BD (BBA + 1) + { 16, 0, insert_bd, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED }, + + /* The BD field in a B form instruction when absolute addressing is + used. */ +#define BDA (BD + 1) + { 16, 0, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED }, + + /* The BD field in a B form instruction when the - modifier is used. + This sets the y bit of the BO field appropriately. */ +#define BDM (BDA + 1) + { 16, 0, insert_bdm, extract_bdm, + PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED }, + + /* The BD field in a B form instruction when the - modifier is used + and absolute address is used. */ +#define BDMA (BDM + 1) + { 16, 0, insert_bdm, extract_bdm, + PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED }, + + /* The BD field in a B form instruction when the + modifier is used. + This sets the y bit of the BO field appropriately. */ +#define BDP (BDMA + 1) + { 16, 0, insert_bdp, extract_bdp, + PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED }, + + /* The BD field in a B form instruction when the + modifier is used + and absolute addressing is used. */ +#define BDPA (BDP + 1) + { 16, 0, insert_bdp, extract_bdp, + PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED }, + + /* The BF field in an X or XL form instruction. */ +#define BF (BDPA + 1) + { 3, 23, 0, 0, PPC_OPERAND_CR }, + + /* An optional BF field. This is used for comparison instructions, + in which an omitted BF field is taken as zero. */ +#define OBF (BF + 1) + { 3, 23, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL }, + + /* The BFA field in an X or XL form instruction. */ +#define BFA (OBF + 1) + { 3, 18, 0, 0, PPC_OPERAND_CR }, + + /* The BI field in a B form or XL form instruction. */ +#define BI (BFA + 1) +#define BI_MASK (0x1f << 16) + { 5, 16, 0, 0, PPC_OPERAND_CR }, + + /* The BO field in a B form instruction. Certain values are + illegal. */ +#define BO (BI + 1) +#define BO_MASK (0x1f << 21) + { 5, 21, insert_bo, extract_bo, 0 }, + + /* The BO field in a B form instruction when the + or - modifier is + used. This is like the BO field, but it must be even. */ +#define BOE (BO + 1) + { 5, 21, insert_boe, extract_boe, 0 }, + + /* The BT field in an X or XL form instruction. */ +#define BT (BOE + 1) + { 5, 21, 0, 0, PPC_OPERAND_CR }, + + /* The condition register number portion of the BI field in a B form + or XL form instruction. This is used for the extended + conditional branch mnemonics, which set the lower two bits of the + BI field. This field is optional. */ +#define CR (BT + 1) + { 3, 18, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL }, + + /* The D field in a D form instruction. This is a displacement off + a register, and implies that the next operand is a register in + parentheses. */ +#define D (CR + 1) + { 16, 0, 0, 0, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED }, + + /* The DS field in a DS form instruction. This is like D, but the + lower two bits are forced to zero. */ +#define DS (D + 1) + { 16, 0, insert_ds, extract_ds, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED }, + + /* The FL1 field in a POWER SC form instruction. */ +#define FL1 (DS + 1) + { 4, 12, 0, 0, 0 }, + + /* The FL2 field in a POWER SC form instruction. */ +#define FL2 (FL1 + 1) + { 3, 2, 0, 0, 0 }, + + /* The FLM field in an XFL form instruction. */ +#define FLM (FL2 + 1) + { 8, 17, 0, 0, 0 }, + + /* The FRA field in an X or A form instruction. */ +#define FRA (FLM + 1) +#define FRA_MASK (0x1f << 16) + { 5, 16, 0, 0, PPC_OPERAND_FPR }, + + /* The FRB field in an X or A form instruction. */ +#define FRB (FRA + 1) +#define FRB_MASK (0x1f << 11) + { 5, 11, 0, 0, PPC_OPERAND_FPR }, + + /* The FRC field in an A form instruction. */ +#define FRC (FRB + 1) +#define FRC_MASK (0x1f << 6) + { 5, 6, 0, 0, PPC_OPERAND_FPR }, + + /* The FRS field in an X form instruction or the FRT field in a D, X + or A form instruction. */ +#define FRS (FRC + 1) +#define FRT (FRS) + { 5, 21, 0, 0, PPC_OPERAND_FPR }, + + /* The FXM field in an XFX instruction. */ +#define FXM (FRS + 1) +#define FXM_MASK (0xff << 12) + { 8, 12, 0, 0, 0 }, + + /* The L field in a D or X form instruction. */ +#define L (FXM + 1) + { 1, 21, 0, 0, PPC_OPERAND_OPTIONAL }, + + /* The LEV field in a POWER SC form instruction. */ +#define LEV (L + 1) + { 7, 5, 0, 0, 0 }, + + /* The LI field in an I form instruction. The lower two bits are + forced to zero. */ +#define LI (LEV + 1) + { 26, 0, insert_li, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED }, + + /* The LI field in an I form instruction when used as an absolute + address. */ +#define LIA (LI + 1) + { 26, 0, insert_li, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED }, + + /* The MB field in an M form instruction. */ +#define MB (LIA + 1) +#define MB_MASK (0x1f << 6) + { 5, 6, 0, 0, 0 }, + + /* The ME field in an M form instruction. */ +#define ME (MB + 1) +#define ME_MASK (0x1f << 1) + { 5, 1, 0, 0, 0 }, + + /* The MB and ME fields in an M form instruction expressed a single + operand which is a bitmask indicating which bits to select. This + is a two operand form using PPC_OPERAND_NEXT. See the + description in opcode/ppc.h for what this means. */ +#define MBE (ME + 1) + { 5, 6, 0, 0, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT }, + { 32, 0, insert_mbe, extract_mbe, 0 }, + + /* The MB or ME field in an MD or MDS form instruction. The high + bit is wrapped to the low end. */ +#define MB6 (MBE + 2) +#define ME6 (MB6) +#define MB6_MASK (0x3f << 5) + { 6, 5, insert_mb6, extract_mb6, 0 }, + + /* The NB field in an X form instruction. The value 32 is stored as + 0. */ +#define NB (MB6 + 1) + { 6, 11, insert_nb, extract_nb, 0 }, + + /* The NSI field in a D form instruction. This is the same as the + SI field, only negated. */ +#define NSI (NB + 1) + { 16, 0, insert_nsi, extract_nsi, + PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED }, + + /* The RA field in an D, DS, X, XO, M, or MDS form instruction. */ +#define RA (NSI + 1) +#define RA_MASK (0x1f << 16) + { 5, 16, 0, 0, PPC_OPERAND_GPR }, + + /* The RA field in a D or X form instruction which is an updating + load, which means that the RA field may not be zero and may not + equal the RT field. */ +#define RAL (RA + 1) + { 5, 16, insert_ral, 0, PPC_OPERAND_GPR }, + + /* The RA field in an lmw instruction, which has special value + restrictions. */ +#define RAM (RAL + 1) + { 5, 16, insert_ram, 0, PPC_OPERAND_GPR }, + + /* The RA field in a D or X form instruction which is an updating + store or an updating floating point load, which means that the RA + field may not be zero. */ +#define RAS (RAM + 1) + { 5, 16, insert_ras, 0, PPC_OPERAND_GPR }, + + /* The RB field in an X, XO, M, or MDS form instruction. */ +#define RB (RAS + 1) +#define RB_MASK (0x1f << 11) + { 5, 11, 0, 0, PPC_OPERAND_GPR }, + + /* The RB field in an X form instruction when it must be the same as + the RS field in the instruction. This is used for extended + mnemonics like mr. */ +#define RBS (RB + 1) + { 5, 1, insert_rbs, extract_rbs, PPC_OPERAND_FAKE }, + + /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form + instruction or the RT field in a D, DS, X, XFX or XO form + instruction. */ +#define RS (RBS + 1) +#define RT (RS) +#define RT_MASK (0x1f << 21) + { 5, 21, 0, 0, PPC_OPERAND_GPR }, + + /* The SH field in an X or M form instruction. */ +#define SH (RS + 1) +#define SH_MASK (0x1f << 11) + { 5, 11, 0, 0, 0 }, + + /* The SH field in an MD form instruction. This is split. */ +#define SH6 (SH + 1) +#define SH6_MASK ((0x1f << 11) | (1 << 1)) + { 6, 1, insert_sh6, extract_sh6, 0 }, + + /* The SI field in a D form instruction. */ +#define SI (SH6 + 1) + { 16, 0, 0, 0, PPC_OPERAND_SIGNED }, + + /* The SI field in a D form instruction when we accept a wide range + of positive values. */ +#define SISIGNOPT (SI + 1) + { 16, 0, 0, 0, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT }, + + /* The SPR field in an XFX form instruction. This is flipped--the + lower 5 bits are stored in the upper 5 and vice- versa. */ +#define SPR (SISIGNOPT + 1) +#define SPR_MASK (0x3ff << 11) + { 10, 11, insert_spr, extract_spr, 0 }, + + /* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */ +#define SPRBAT (SPR + 1) +#define SPRBAT_MASK (0x3 << 17) + { 2, 17, 0, 0, 0 }, + + /* The SPRG register number in an XFX form m[ft]sprg instruction. */ +#define SPRG (SPRBAT + 1) +#define SPRG_MASK (0x3 << 16) + { 2, 16, 0, 0, 0 }, + + /* The SR field in an X form instruction. */ +#define SR (SPRG + 1) + { 4, 16, 0, 0, 0 }, + + /* The SV field in a POWER SC form instruction. */ +#define SV (SR + 1) + { 14, 2, 0, 0, 0 }, + + /* The TBR field in an XFX form instruction. This is like the SPR + field, but it is optional. */ +#define TBR (SV + 1) + { 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL }, + + /* The TO field in a D or X form instruction. */ +#define TO (TBR + 1) +#define TO_MASK (0x1f << 21) + { 5, 21, 0, 0, 0 }, + + /* The U field in an X form instruction. */ +#define U (TO + 1) + { 4, 12, 0, 0, 0 }, + + /* The UI field in a D form instruction. */ +#define UI (U + 1) + { 16, 0, 0, 0, 0 }, +}; + +/* The functions used to insert and extract complicated operands. */ + +/* The BA field in an XL form instruction when it must be the same as + the BT field in the same instruction. This operand is marked FAKE. + The insertion function just copies the BT field into the BA field, + and the extraction function just checks that the fields are the + same. */ + +/*ARGSUSED*/ +static unsigned long +insert_bat (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | (((insn >> 21) & 0x1f) << 16); +} + +static long +extract_bat (insn, invalid) + unsigned long insn; + int *invalid; +{ + if (invalid != (int *) NULL + && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f)) + *invalid = 1; + return 0; +} + +/* The BB field in an XL form instruction when it must be the same as + the BA field in the same instruction. This operand is marked FAKE. + The insertion function just copies the BA field into the BB field, + and the extraction function just checks that the fields are the + same. */ + +/*ARGSUSED*/ +static unsigned long +insert_bba (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | (((insn >> 16) & 0x1f) << 11); +} + +static long +extract_bba (insn, invalid) + unsigned long insn; + int *invalid; +{ + if (invalid != (int *) NULL + && ((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f)) + *invalid = 1; + return 0; +} + +/* The BD field in a B form instruction. The lower two bits are + forced to zero. */ + +/*ARGSUSED*/ +static unsigned long +insert_bd (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | (value & 0xfffc); +} + +/*ARGSUSED*/ +static long +extract_bd (insn, invalid) + unsigned long insn; + int *invalid; +{ + if ((insn & 0x8000) != 0) + return (insn & 0xfffc) - 0x10000; + else + return insn & 0xfffc; +} + +/* The BD field in a B form instruction when the - modifier is used. + This modifier means that the branch is not expected to be taken. + We must set the y bit of the BO field to 1 if the offset is + negative. When extracting, we require that the y bit be 1 and that + the offset be positive, since if the y bit is 0 we just want to + print the normal form of the instruction. */ + +/*ARGSUSED*/ +static unsigned long +insert_bdm (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if ((value & 0x8000) != 0) + insn |= 1 << 21; + return insn | (value & 0xfffc); +} + +static long +extract_bdm (insn, invalid) + unsigned long insn; + int *invalid; +{ + if (invalid != (int *) NULL + && ((insn & (1 << 21)) == 0 + || (insn & (1 << 15)) == 0)) + *invalid = 1; + if ((insn & 0x8000) != 0) + return (insn & 0xfffc) - 0x10000; + else + return insn & 0xfffc; +} + +/* The BD field in a B form instruction when the + modifier is used. + This is like BDM, above, except that the branch is expected to be + taken. */ + +/*ARGSUSED*/ +static unsigned long +insert_bdp (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if ((value & 0x8000) == 0) + insn |= 1 << 21; + return insn | (value & 0xfffc); +} + +static long +extract_bdp (insn, invalid) + unsigned long insn; + int *invalid; +{ + if (invalid != (int *) NULL + && ((insn & (1 << 21)) == 0 + || (insn & (1 << 15)) != 0)) + *invalid = 1; + if ((insn & 0x8000) != 0) + return (insn & 0xfffc) - 0x10000; + else + return insn & 0xfffc; +} + +/* Check for legal values of a BO field. */ + +static int +valid_bo (value) + long value; +{ + /* Certain encodings have bits that are required to be zero. These + are (z must be zero, y may be anything): + 001zy + 011zy + 1z00y + 1z01y + 1z1zz + */ + switch (value & 0x14) + { + default: + case 0: + return 1; + case 0x4: + return (value & 0x2) == 0; + case 0x10: + return (value & 0x8) == 0; + case 0x14: + return value == 0x14; + } +} + +/* The BO field in a B form instruction. Warn about attempts to set + the field to an illegal value. */ + +static unsigned long +insert_bo (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (errmsg != (const char **) NULL + && ! valid_bo (value)) + *errmsg = "invalid conditional option"; + return insn | ((value & 0x1f) << 21); +} + +static long +extract_bo (insn, invalid) + unsigned long insn; + int *invalid; +{ + long value; + + value = (insn >> 21) & 0x1f; + if (invalid != (int *) NULL + && ! valid_bo (value)) + *invalid = 1; + return value; +} + +/* The BO field in a B form instruction when the + or - modifier is + used. This is like the BO field, but it must be even. When + extracting it, we force it to be even. */ + +static unsigned long +insert_boe (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (errmsg != (const char **) NULL) + { + if (! valid_bo (value)) + *errmsg = "invalid conditional option"; + else if ((value & 1) != 0) + *errmsg = "attempt to set y bit when using + or - modifier"; + } + return insn | ((value & 0x1f) << 21); +} + +static long +extract_boe (insn, invalid) + unsigned long insn; + int *invalid; +{ + long value; + + value = (insn >> 21) & 0x1f; + if (invalid != (int *) NULL + && ! valid_bo (value)) + *invalid = 1; + return value & 0x1e; +} + +/* The DS field in a DS form instruction. This is like D, but the + lower two bits are forced to zero. */ + +/*ARGSUSED*/ +static unsigned long +insert_ds (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | (value & 0xfffc); +} + +/*ARGSUSED*/ +static long +extract_ds (insn, invalid) + unsigned long insn; + int *invalid; +{ + if ((insn & 0x8000) != 0) + return (insn & 0xfffc) - 0x10000; + else + return insn & 0xfffc; +} + +/* The LI field in an I form instruction. The lower two bits are + forced to zero. */ + +/*ARGSUSED*/ +static unsigned long +insert_li (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | (value & 0x3fffffc); +} + +/*ARGSUSED*/ +static long +extract_li (insn, invalid) + unsigned long insn; + int *invalid; +{ + if ((insn & 0x2000000) != 0) + return (insn & 0x3fffffc) - 0x4000000; + else + return insn & 0x3fffffc; +} + +/* The MB and ME fields in an M form instruction expressed as a single + operand which is itself a bitmask. The extraction function always + marks it as invalid, since we never want to recognize an + instruction which uses a field of this type. */ + +static unsigned long +insert_mbe (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + unsigned long uval; + int mb, me; + + uval = value; + + if (uval == 0) + { + if (errmsg != (const char **) NULL) + *errmsg = "illegal bitmask"; + return insn; + } + + me = 31; + while ((uval & 1) == 0) + { + uval >>= 1; + --me; + } + + mb = me; + uval >>= 1; + while ((uval & 1) != 0) + { + uval >>= 1; + --mb; + } + + if (uval != 0) + { + if (errmsg != (const char **) NULL) + *errmsg = "illegal bitmask"; + } + + return insn | (mb << 6) | (me << 1); +} + +static long +extract_mbe (insn, invalid) + unsigned long insn; + int *invalid; +{ + long ret; + int mb, me; + int i; + + if (invalid != (int *) NULL) + *invalid = 1; + + ret = 0; + mb = (insn >> 6) & 0x1f; + me = (insn >> 1) & 0x1f; + for (i = mb; i < me; i++) + ret |= 1 << (31 - i); + return ret; +} + +/* The MB or ME field in an MD or MDS form instruction. The high bit + is wrapped to the low end. */ + +/*ARGSUSED*/ +static unsigned long +insert_mb6 (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | ((value & 0x1f) << 6) | (value & 0x20); +} + +/*ARGSUSED*/ +static long +extract_mb6 (insn, invalid) + unsigned long insn; + int *invalid; +{ + return ((insn >> 6) & 0x1f) | (insn & 0x20); +} + +/* The NB field in an X form instruction. The value 32 is stored as + 0. */ + +static unsigned long +insert_nb (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (value < 0 || value > 32) + *errmsg = "value out of range"; + if (value == 32) + value = 0; + return insn | ((value & 0x1f) << 11); +} + +/*ARGSUSED*/ +static long +extract_nb (insn, invalid) + unsigned long insn; + int *invalid; +{ + long ret; + + ret = (insn >> 11) & 0x1f; + if (ret == 0) + ret = 32; + return ret; +} + +/* The NSI field in a D form instruction. This is the same as the SI + field, only negated. The extraction function always marks it as + invalid, since we never want to recognize an instruction which uses + a field of this type. */ + +/*ARGSUSED*/ +static unsigned long +insert_nsi (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | ((- value) & 0xffff); +} + +static long +extract_nsi (insn, invalid) + unsigned long insn; + int *invalid; +{ + if (invalid != (int *) NULL) + *invalid = 1; + if ((insn & 0x8000) != 0) + return - ((insn & 0xffff) - 0x10000); + else + return - (insn & 0xffff); +} + +/* The RA field in a D or X form instruction which is an updating + load, which means that the RA field may not be zero and may not + equal the RT field. */ + +static unsigned long +insert_ral (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (value == 0 + || value == ((insn >> 21) & 0x1f)) + *errmsg = "invalid register operand when updating"; + return insn | ((value & 0x1f) << 16); +} + +/* The RA field in an lmw instruction, which has special value + restrictions. */ + +static unsigned long +insert_ram (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (value >= ((insn >> 21) & 0x1f)) + *errmsg = "index register in load range"; + return insn | ((value & 0x1f) << 16); +} + +/* The RA field in a D or X form instruction which is an updating + store or an updating floating point load, which means that the RA + field may not be zero. */ + +static unsigned long +insert_ras (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (value == 0) + *errmsg = "invalid register operand when updating"; + return insn | ((value & 0x1f) << 16); +} + +/* The RB field in an X form instruction when it must be the same as + the RS field in the instruction. This is used for extended + mnemonics like mr. This operand is marked FAKE. The insertion + function just copies the BT field into the BA field, and the + extraction function just checks that the fields are the same. */ + +/*ARGSUSED*/ +static unsigned long +insert_rbs (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | (((insn >> 21) & 0x1f) << 11); +} + +static long +extract_rbs (insn, invalid) + unsigned long insn; + int *invalid; +{ + if (invalid != (int *) NULL + && ((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f)) + *invalid = 1; + return 0; +} + +/* The SH field in an MD form instruction. This is split. */ + +/*ARGSUSED*/ +static unsigned long +insert_sh6 (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4); +} + +/*ARGSUSED*/ +static long +extract_sh6 (insn, invalid) + unsigned long insn; + int *invalid; +{ + return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20); +} + +/* The SPR field in an XFX form instruction. This is flipped--the + lower 5 bits are stored in the upper 5 and vice- versa. */ + +static unsigned long +insert_spr (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6); +} + +static long +extract_spr (insn, invalid) + unsigned long insn; + int *invalid; +{ + return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0); +} + +/* The TBR field in an XFX instruction. This is just like SPR, but it + is optional. When TBR is omitted, it must be inserted as 268 (the + magic number of the TB register). These functions treat 0 + (indicating an omitted optional operand) as 268. This means that + ``mftb 4,0'' is not handled correctly. This does not matter very + much, since the architecture manual does not define mftb as + accepting any values other than 268 or 269. */ + +#define TB (268) + +static unsigned long +insert_tbr (insn, value, errmsg) + unsigned long insn; + long value; + const char **errmsg; +{ + if (value == 0) + value = TB; + return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6); +} + +static long +extract_tbr (insn, invalid) + unsigned long insn; + int *invalid; +{ + long ret; + + ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0); + if (ret == TB) + ret = 0; + return ret; +} + +/* Macros used to form opcodes. */ + +/* The main opcode. */ +#define OP(x) (((x) & 0x3f) << 26) +#define OP_MASK OP (0x3f) + +/* The main opcode combined with a trap code in the TO field of a D + form instruction. Used for extended mnemonics for the trap + instructions. */ +#define OPTO(x,to) (OP (x) | (((to) & 0x1f) << 21)) +#define OPTO_MASK (OP_MASK | TO_MASK) + +/* The main opcode combined with a comparison size bit in the L field + of a D form or X form instruction. Used for extended mnemonics for + the comparison instructions. */ +#define OPL(x,l) (OP (x) | (((l) & 1) << 21)) +#define OPL_MASK OPL (0x3f,1) + +/* An A form instruction. */ +#define A(op, xop, rc) (OP (op) | (((xop) & 0x1f) << 1) | ((rc) & 1)) +#define A_MASK A (0x3f, 0x1f, 1) + +/* An A_MASK with the FRB field fixed. */ +#define AFRB_MASK (A_MASK | FRB_MASK) + +/* An A_MASK with the FRC field fixed. */ +#define AFRC_MASK (A_MASK | FRC_MASK) + +/* An A_MASK with the FRA and FRC fields fixed. */ +#define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK) + +/* A B form instruction. */ +#define B(op, aa, lk) (OP (op) | (((aa) & 1) << 1) | ((lk) & 1)) +#define B_MASK B (0x3f, 1, 1) + +/* A B form instruction setting the BO field. */ +#define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | (((bo) & 0x1f) << 21)) +#define BBO_MASK BBO (0x3f, 0x1f, 1, 1) + +/* A BBO_MASK with the y bit of the BO field removed. This permits + matching a conditional branch regardless of the setting of the y + bit. */ +#define Y_MASK (1 << 21) +#define BBOY_MASK (BBO_MASK &~ Y_MASK) + +/* A B form instruction setting the BO field and the condition bits of + the BI field. */ +#define BBOCB(op, bo, cb, aa, lk) \ + (BBO ((op), (bo), (aa), (lk)) | (((cb) & 0x3) << 16)) +#define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1) + +/* A BBOCB_MASK with the y bit of the BO field removed. */ +#define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK) + +/* A BBOYCB_MASK in which the BI field is fixed. */ +#define BBOYBI_MASK (BBOYCB_MASK | BI_MASK) + +/* The main opcode mask with the RA field clear. */ +#define DRA_MASK (OP_MASK | RA_MASK) + +/* A DS form instruction. */ +#define DSO(op, xop) (OP (op) | ((xop) & 0x3)) +#define DS_MASK DSO (0x3f, 3) + +/* An M form instruction. */ +#define M(op, rc) (OP (op) | ((rc) & 1)) +#define M_MASK M (0x3f, 1) + +/* An M form instruction with the ME field specified. */ +#define MME(op, me, rc) (M ((op), (rc)) | (((me) & 0x1f) << 1)) + +/* An M_MASK with the MB and ME fields fixed. */ +#define MMBME_MASK (M_MASK | MB_MASK | ME_MASK) + +/* An M_MASK with the SH and ME fields fixed. */ +#define MSHME_MASK (M_MASK | SH_MASK | ME_MASK) + +/* An MD form instruction. */ +#define MD(op, xop, rc) (OP (op) | (((xop) & 0x7) << 2) | ((rc) & 1)) +#define MD_MASK MD (0x3f, 0x7, 1) + +/* An MD_MASK with the MB field fixed. */ +#define MDMB_MASK (MD_MASK | MB6_MASK) + +/* An MD_MASK with the SH field fixed. */ +#define MDSH_MASK (MD_MASK | SH6_MASK) + +/* An MDS form instruction. */ +#define MDS(op, xop, rc) (OP (op) | (((xop) & 0xf) << 1) | ((rc) & 1)) +#define MDS_MASK MDS (0x3f, 0xf, 1) + +/* An MDS_MASK with the MB field fixed. */ +#define MDSMB_MASK (MDS_MASK | MB6_MASK) + +/* An SC form instruction. */ +#define SC(op, sa, lk) (OP (op) | (((sa) & 1) << 1) | ((lk) & 1)) +#define SC_MASK (OP_MASK | (0x3ff << 16) | (1 << 1) | 1) + +/* An X form instruction. */ +#define X(op, xop) (OP (op) | (((xop) & 0x3ff) << 1)) + +/* An X form instruction with the RC bit specified. */ +#define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1)) + +/* The mask for an X form instruction. */ +#define X_MASK XRC (0x3f, 0x3ff, 1) + +/* An X_MASK with the RA field fixed. */ +#define XRA_MASK (X_MASK | RA_MASK) + +/* An X_MASK with the RB field fixed. */ +#define XRB_MASK (X_MASK | RB_MASK) + +/* An X_MASK with the RT field fixed. */ +#define XRT_MASK (X_MASK | RT_MASK) + +/* An X_MASK with the RA and RB fields fixed. */ +#define XRARB_MASK (X_MASK | RA_MASK | RB_MASK) + +/* An X_MASK with the RT and RA fields fixed. */ +#define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK) + +/* An X form comparison instruction. */ +#define XCMPL(op, xop, l) (X ((op), (xop)) | (((l) & 1) << 21)) + +/* The mask for an X form comparison instruction. */ +#define XCMP_MASK (X_MASK | (1 << 22)) + +/* The mask for an X form comparison instruction with the L field + fixed. */ +#define XCMPL_MASK (XCMP_MASK | (1 << 21)) + +/* An X form trap instruction with the TO field specified. */ +#define XTO(op, xop, to) (X ((op), (xop)) | (((to) & 0x1f) << 21)) +#define XTO_MASK (X_MASK | TO_MASK) + +/* An XFL form instruction. */ +#define XFL(op, xop, rc) (OP (op) | (((xop) & 0x3ff) << 1) | ((rc) & 1)) +#define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (1 << 25) | (1 << 16)) + +/* An XL form instruction with the LK field set to 0. */ +#define XL(op, xop) (OP (op) | (((xop) & 0x3ff) << 1)) + +/* An XL form instruction which uses the LK field. */ +#define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1)) + +/* The mask for an XL form instruction. */ +#define XL_MASK XLLK (0x3f, 0x3ff, 1) + +/* An XL form instruction which explicitly sets the BO field. */ +#define XLO(op, bo, xop, lk) \ + (XLLK ((op), (xop), (lk)) | (((bo) & 0x1f) << 21)) +#define XLO_MASK (XL_MASK | BO_MASK) + +/* An XL form instruction which explicitly sets the y bit of the BO + field. */ +#define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | (((y) & 1) << 21)) +#define XLYLK_MASK (XL_MASK | Y_MASK) + +/* An XL form instruction which sets the BO field and the condition + bits of the BI field. */ +#define XLOCB(op, bo, cb, xop, lk) \ + (XLO ((op), (bo), (xop), (lk)) | (((cb) & 3) << 16)) +#define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1) + +/* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed. */ +#define XLBB_MASK (XL_MASK | BB_MASK) +#define XLYBB_MASK (XLYLK_MASK | BB_MASK) +#define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK) + +/* An XL_MASK with the BO and BB fields fixed. */ +#define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK) + +/* An XL_MASK with the BO, BI and BB fields fixed. */ +#define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK) + +/* An XO form instruction. */ +#define XO(op, xop, oe, rc) \ + (OP (op) | (((xop) & 0x1ff) << 1) | (((oe) & 1) << 10) | ((rc) & 1)) +#define XO_MASK XO (0x3f, 0x1ff, 1, 1) + +/* An XO_MASK with the RB field fixed. */ +#define XORB_MASK (XO_MASK | RB_MASK) + +/* An XS form instruction. */ +#define XS(op, xop, rc) (OP (op) | (((xop) & 0x1ff) << 2) | ((rc) & 1)) +#define XS_MASK XS (0x3f, 0x1ff, 1) + +/* A mask for the FXM version of an XFX form instruction. */ +#define XFXFXM_MASK (X_MASK | (1 << 20) | (1 << 11)) + +/* An XFX form instruction with the FXM field filled in. */ +#define XFXM(op, xop, fxm) \ + (X ((op), (xop)) | (((fxm) & 0xff) << 12)) + +/* An XFX form instruction with the SPR field filled in. */ +#define XSPR(op, xop, spr) \ + (X ((op), (xop)) | (((spr) & 0x1f) << 16) | (((spr) & 0x3e0) << 6)) +#define XSPR_MASK (X_MASK | SPR_MASK) + +/* An XFX form instruction with the SPR field filled in except for the + SPRBAT field. */ +#define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK) + +/* An XFX form instruction with the SPR field filled in except for the + SPRG field. */ +#define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK) + +/* The BO encodings used in extended conditional branch mnemonics. */ +#define BODNZF (0x0) +#define BODNZFP (0x1) +#define BODZF (0x2) +#define BODZFP (0x3) +#define BOF (0x4) +#define BOFP (0x5) +#define BODNZT (0x8) +#define BODNZTP (0x9) +#define BODZT (0xa) +#define BODZTP (0xb) +#define BOT (0xc) +#define BOTP (0xd) +#define BODNZ (0x10) +#define BODNZP (0x11) +#define BODZ (0x12) +#define BODZP (0x13) +#define BOU (0x14) + +/* The BI condition bit encodings used in extended conditional branch + mnemonics. */ +#define CBLT (0) +#define CBGT (1) +#define CBEQ (2) +#define CBSO (3) + +/* The TO encodings used in extended trap mnemonics. */ +#define TOLGT (0x1) +#define TOLLT (0x2) +#define TOEQ (0x4) +#define TOLGE (0x5) +#define TOLNL (0x5) +#define TOLLE (0x6) +#define TOLNG (0x6) +#define TOGT (0x8) +#define TOGE (0xc) +#define TONL (0xc) +#define TOLT (0x10) +#define TOLE (0x14) +#define TONG (0x14) +#define TONE (0x18) +#define TOU (0x1f) + +/* Smaller names for the flags so each entry in the opcodes table will + fit on a single line. */ +#define PPC PPC_OPCODE_PPC | PPC_OPCODE_ANY +#define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY +#define PPC32 PPC_OPCODE_PPC | PPC_OPCODE_32 | PPC_OPCODE_ANY +#define PPC64 PPC_OPCODE_PPC | PPC_OPCODE_64 | PPC_OPCODE_ANY +#define PPCONLY PPC_OPCODE_PPC +#define POWER PPC_OPCODE_POWER | PPC_OPCODE_ANY +#define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_ANY +#define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_ANY | PPC_OPCODE_32 +#define COM PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY +#define COM32 PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY | PPC_OPCODE_32 +#define M601 PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_ANY +#define PWRCOM PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON | PPC_OPCODE_ANY +#define MFDEC1 PPC_OPCODE_POWER +#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 + +/* The opcode table. + + The format of the opcode table is: + + NAME OPCODE MASK FLAGS { OPERANDS } + + NAME is the name of the instruction. + OPCODE is the instruction opcode. + MASK is the opcode mask; this is used to tell the disassembler + which bits in the actual opcode must match OPCODE. + FLAGS are flags indicated what processors support the instruction. + OPERANDS is the list of operands. + + The disassembler reads the table in order and prints the first + instruction which matches, so this table is sorted to put more + specific instructions before more general instructions. It is also + sorted by major opcode. */ + +const struct powerpc_opcode powerpc_opcodes[] = { +{ "tdlgti", OPTO(2,TOLGT), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdllti", OPTO(2,TOLLT), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdeqi", OPTO(2,TOEQ), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdlgei", OPTO(2,TOLGE), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdlnli", OPTO(2,TOLNL), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdllei", OPTO(2,TOLLE), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdlngi", OPTO(2,TOLNG), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdgti", OPTO(2,TOGT), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdgei", OPTO(2,TOGE), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdnli", OPTO(2,TONL), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdlti", OPTO(2,TOLT), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdlei", OPTO(2,TOLE), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdngi", OPTO(2,TONG), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdnei", OPTO(2,TONE), OPTO_MASK, PPC64, { RA, SI } }, +{ "tdi", OP(2), OP_MASK, PPC64, { TO, RA, SI } }, + +{ "twlgti", OPTO(3,TOLGT), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tlgti", OPTO(3,TOLGT), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twllti", OPTO(3,TOLLT), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tllti", OPTO(3,TOLLT), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "tweqi", OPTO(3,TOEQ), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "teqi", OPTO(3,TOEQ), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twlgei", OPTO(3,TOLGE), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tlgei", OPTO(3,TOLGE), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twlnli", OPTO(3,TOLNL), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tlnli", OPTO(3,TOLNL), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twllei", OPTO(3,TOLLE), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tllei", OPTO(3,TOLLE), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twlngi", OPTO(3,TOLNG), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tlngi", OPTO(3,TOLNG), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twgti", OPTO(3,TOGT), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tgti", OPTO(3,TOGT), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twgei", OPTO(3,TOGE), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tgei", OPTO(3,TOGE), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twnli", OPTO(3,TONL), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tnli", OPTO(3,TONL), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twlti", OPTO(3,TOLT), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tlti", OPTO(3,TOLT), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twlei", OPTO(3,TOLE), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tlei", OPTO(3,TOLE), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twngi", OPTO(3,TONG), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tngi", OPTO(3,TONG), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twnei", OPTO(3,TONE), OPTO_MASK, PPCCOM, { RA, SI } }, +{ "tnei", OPTO(3,TONE), OPTO_MASK, PWRCOM, { RA, SI } }, +{ "twi", OP(3), OP_MASK, PPCCOM, { TO, RA, SI } }, +{ "ti", OP(3), OP_MASK, PWRCOM, { TO, RA, SI } }, + +{ "mulli", OP(7), OP_MASK, PPCCOM, { RT, RA, SI } }, +{ "muli", OP(7), OP_MASK, PWRCOM, { RT, RA, SI } }, + +{ "subfic", OP(8), OP_MASK, PPCCOM, { RT, RA, SI } }, +{ "sfi", OP(8), OP_MASK, PWRCOM, { RT, RA, SI } }, + +{ "dozi", OP(9), OP_MASK, M601, { RT, RA, SI } }, + +{ "cmplwi", OPL(10,0), OPL_MASK, PPCCOM, { OBF, RA, UI } }, +{ "cmpldi", OPL(10,1), OPL_MASK, PPC64, { OBF, RA, UI } }, +{ "cmpli", OP(10), OP_MASK, PPCONLY, { BF, L, RA, UI } }, +{ "cmpli", OP(10), OP_MASK, PWRCOM, { BF, RA, UI } }, + +{ "cmpwi", OPL(11,0), OPL_MASK, PPCCOM, { OBF, RA, SI } }, +{ "cmpdi", OPL(11,1), OPL_MASK, PPC64, { OBF, RA, SI } }, +{ "cmpi", OP(11), OP_MASK, PPCONLY, { BF, L, RA, SI } }, +{ "cmpi", OP(11), OP_MASK, PWRCOM, { BF, RA, SI } }, + +{ "addic", OP(12), OP_MASK, PPCCOM, { RT, RA, SI } }, +{ "ai", OP(12), OP_MASK, PWRCOM, { RT, RA, SI } }, +{ "subic", OP(12), OP_MASK, PPCCOM, { RT, RA, NSI } }, + +{ "addic.", OP(13), OP_MASK, PPCCOM, { RT, RA, SI } }, +{ "ai.", OP(13), OP_MASK, PWRCOM, { RT, RA, SI } }, +{ "subic.", OP(13), OP_MASK, PPCCOM, { RT, RA, NSI } }, + +{ "li", OP(14), DRA_MASK, PPCCOM, { RT, SI } }, +{ "lil", OP(14), DRA_MASK, PWRCOM, { RT, SI } }, +{ "addi", OP(14), OP_MASK, PPCCOM, { RT, RA, SI } }, +{ "cal", OP(14), OP_MASK, PWRCOM, { RT, D, RA } }, +{ "subi", OP(14), OP_MASK, PPCCOM, { RT, RA, NSI } }, +{ "la", OP(14), OP_MASK, PPCCOM, { RT, D, RA } }, + +{ "lis", OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } }, +{ "liu", OP(15), DRA_MASK, PWRCOM, { RT, SISIGNOPT } }, +{ "addis", OP(15), OP_MASK, PPCCOM, { RT,RA,SISIGNOPT } }, +{ "cau", OP(15), OP_MASK, PWRCOM, { RT,RA,SISIGNOPT } }, +{ "subis", OP(15), OP_MASK, PPCCOM, { RT, RA, NSI } }, + +{ "bdnz-", BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDM } }, +{ "bdnz+", BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDP } }, +{ "bdnz", BBO(16,BODNZ,0,0), BBOYBI_MASK, PPCCOM, { BD } }, +{ "bdn", BBO(16,BODNZ,0,0), BBOYBI_MASK, PWRCOM, { BD } }, +{ "bdnzl-", BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDM } }, +{ "bdnzl+", BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDP } }, +{ "bdnzl", BBO(16,BODNZ,0,1), BBOYBI_MASK, PPCCOM, { BD } }, +{ "bdnl", BBO(16,BODNZ,0,1), BBOYBI_MASK, PWRCOM, { BD } }, +{ "bdnza-", BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDMA } }, +{ "bdnza+", BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDPA } }, +{ "bdnza", BBO(16,BODNZ,1,0), BBOYBI_MASK, PPCCOM, { BDA } }, +{ "bdna", BBO(16,BODNZ,1,0), BBOYBI_MASK, PWRCOM, { BDA } }, +{ "bdnzla-", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDMA } }, +{ "bdnzla+", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDPA } }, +{ "bdnzla", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPCCOM, { BDA } }, +{ "bdnla", BBO(16,BODNZ,1,1), BBOYBI_MASK, PWRCOM, { BDA } }, +{ "bdz-", BBO(16,BODZ,0,0), BBOYBI_MASK, PPC, { BDM } }, +{ "bdz+", BBO(16,BODZ,0,0), BBOYBI_MASK, PPC, { BDP } }, +{ "bdz", BBO(16,BODZ,0,0), BBOYBI_MASK, COM, { BD } }, +{ "bdzl-", BBO(16,BODZ,0,1), BBOYBI_MASK, PPC, { BDM } }, +{ "bdzl+", BBO(16,BODZ,0,1), BBOYBI_MASK, PPC, { BDP } }, +{ "bdzl", BBO(16,BODZ,0,1), BBOYBI_MASK, COM, { BD } }, +{ "bdza-", BBO(16,BODZ,1,0), BBOYBI_MASK, PPC, { BDMA } }, +{ "bdza+", BBO(16,BODZ,1,0), BBOYBI_MASK, PPC, { BDPA } }, +{ "bdza", BBO(16,BODZ,1,0), BBOYBI_MASK, COM, { BDA } }, +{ "bdzla-", BBO(16,BODZ,1,1), BBOYBI_MASK, PPC, { BDMA } }, +{ "bdzla+", BBO(16,BODZ,1,1), BBOYBI_MASK, PPC, { BDPA } }, +{ "bdzla", BBO(16,BODZ,1,1), BBOYBI_MASK, COM, { BDA } }, +{ "blt-", BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "blt+", BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "blt", BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bltl-", BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bltl+", BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bltl", BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "blta-", BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "blta+", BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "blta", BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bltla-", BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bltla+", BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bltla", BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bgt-", BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bgt+", BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bgt", BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bgtl-", BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bgtl+", BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bgtl", BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bgta-", BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bgta+", BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bgta", BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bgtla-", BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bgtla+", BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bgtla", BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "beq-", BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "beq+", BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "beq", BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "beql-", BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "beql+", BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "beql", BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "beqa-", BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "beqa+", BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "beqa", BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "beqla-", BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "beqla+", BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "beqla", BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bso-", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bso+", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bso", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bsol-", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bsol+", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bsol", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bsoa-", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bsoa+", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bsoa", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bsola-", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bsola+", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bsola", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bun-", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bun+", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bun", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPCCOM, { CR, BD } }, +{ "bunl-", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bunl+", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bunl", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPCCOM, { CR, BD } }, +{ "buna-", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "buna+", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "buna", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPCCOM, { CR, BDA } }, +{ "bunla-", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bunla+", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bunla", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPCCOM, { CR, BDA } }, +{ "bge-", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bge+", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bge", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bgel-", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bgel+", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bgel", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bgea-", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bgea+", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bgea", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bgela-", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bgela+", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bgela", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bnl-", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bnl+", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bnl", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnll-", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bnll+", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bnll", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnla-", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnla+", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnla", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bnlla-", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnlla+", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnlla", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "ble-", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "ble+", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "ble", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "blel-", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "blel+", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "blel", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "blea-", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "blea+", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "blea", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "blela-", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "blela+", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "blela", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bng-", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bng+", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bng", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bngl-", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bngl+", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bngl", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnga-", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnga+", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnga", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bngla-", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bngla+", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bngla", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bne-", BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bne+", BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bne", BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnel-", BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bnel+", BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bnel", BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnea-", BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnea+", BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnea", BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bnela-", BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnela+", BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnela", BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bns-", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bns+", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bns", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnsl-", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bnsl+", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bnsl", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, COM, { CR, BD } }, +{ "bnsa-", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnsa+", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnsa", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bnsla-", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnsla+", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnsla", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, COM, { CR, BDA } }, +{ "bnu-", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bnu+", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bnu", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPCCOM, { CR, BD } }, +{ "bnul-", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } }, +{ "bnul+", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } }, +{ "bnul", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPCCOM, { CR, BD } }, +{ "bnua-", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnua+", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnua", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPCCOM, { CR, BDA } }, +{ "bnula-", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } }, +{ "bnula+", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } }, +{ "bnula", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPCCOM, { CR, BDA } }, +{ "bdnzt-", BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdnzt+", BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdnzt", BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdnztl", BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdnzta", BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bdnzf-", BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdnzf+", BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdnzf", BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdnzfl", BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdnzfa", BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bt-", BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDM } }, +{ "bt+", BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDP } }, +{ "bt", BBO(16,BOT,0,0), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bbt", BBO(16,BOT,0,0), BBOY_MASK, PWRCOM, { BI, BD } }, +{ "btl-", BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDM } }, +{ "btl+", BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDP } }, +{ "btl", BBO(16,BOT,0,1), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bbtl", BBO(16,BOT,0,1), BBOY_MASK, PWRCOM, { BI, BD } }, +{ "bta-", BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bta+", BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bta", BBO(16,BOT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bbta", BBO(16,BOT,1,0), BBOY_MASK, PWRCOM, { BI, BDA } }, +{ "btla-", BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDMA } }, +{ "btla+", BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDPA } }, +{ "btla", BBO(16,BOT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bbtla", BBO(16,BOT,1,1), BBOY_MASK, PWRCOM, { BI, BDA } }, +{ "bf-", BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDM } }, +{ "bf+", BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDP } }, +{ "bf", BBO(16,BOF,0,0), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bbf", BBO(16,BOF,0,0), BBOY_MASK, PWRCOM, { BI, BD } }, +{ "bfl-", BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDM } }, +{ "bfl+", BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDP } }, +{ "bfl", BBO(16,BOF,0,1), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bbfl", BBO(16,BOF,0,1), BBOY_MASK, PWRCOM, { BI, BD } }, +{ "bfa-", BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bfa+", BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bfa", BBO(16,BOF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bbfa", BBO(16,BOF,1,0), BBOY_MASK, PWRCOM, { BI, BDA } }, +{ "bfla-", BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bfla+", BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bfla", BBO(16,BOF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bbfla", BBO(16,BOF,1,1), BBOY_MASK, PWRCOM, { BI, BDA } }, +{ "bdzt-", BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdzt+", BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdzt", BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdztl-", BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdztl+", BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdztl", BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdzta-", BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdzta+", BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdzta", BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdztla", BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bdzf-", BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdzf+", BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdzf", BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdzfl-", BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDM } }, +{ "bdzfl+", BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDP } }, +{ "bdzfl", BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } }, +{ "bdzfa-", BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdzfa+", BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdzfa", BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDMA } }, +{ "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDPA } }, +{ "bdzfla", BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } }, +{ "bc-", B(16,0,0), B_MASK, PPC, { BOE, BI, BDM } }, +{ "bc+", B(16,0,0), B_MASK, PPC, { BOE, BI, BDP } }, +{ "bc", B(16,0,0), B_MASK, COM, { BO, BI, BD } }, +{ "bcl-", B(16,0,1), B_MASK, PPC, { BOE, BI, BDM } }, +{ "bcl+", B(16,0,1), B_MASK, PPC, { BOE, BI, BDP } }, +{ "bcl", B(16,0,1), B_MASK, COM, { BO, BI, BD } }, +{ "bca-", B(16,1,0), B_MASK, PPC, { BOE, BI, BDMA } }, +{ "bca+", B(16,1,0), B_MASK, PPC, { BOE, BI, BDPA } }, +{ "bca", B(16,1,0), B_MASK, COM, { BO, BI, BDA } }, +{ "bcla-", B(16,1,1), B_MASK, PPC, { BOE, BI, BDMA } }, +{ "bcla+", B(16,1,1), B_MASK, PPC, { BOE, BI, BDPA } }, +{ "bcla", B(16,1,1), B_MASK, COM, { BO, BI, BDA } }, + +{ "sc", SC(17,1,0), 0xffffffff, PPC, { 0 } }, +{ "svc", SC(17,0,0), SC_MASK, POWER, { LEV, FL1, FL2 } }, +{ "svcl", SC(17,0,1), SC_MASK, POWER, { LEV, FL1, FL2 } }, +{ "svca", SC(17,1,0), SC_MASK, PWRCOM, { SV } }, +{ "svcla", SC(17,1,1), SC_MASK, POWER, { SV } }, + +{ "b", B(18,0,0), B_MASK, COM, { LI } }, +{ "bl", B(18,0,1), B_MASK, COM, { LI } }, +{ "ba", B(18,1,0), B_MASK, COM, { LIA } }, +{ "bla", B(18,1,1), B_MASK, COM, { LIA } }, + +{ "mcrf", XL(19,0), XLBB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } }, + +{ "blr", XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } }, +{ "br", XLO(19,BOU,16,0), XLBOBIBB_MASK, PWRCOM, { 0 } }, +{ "blrl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } }, +{ "brl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PWRCOM, { 0 } }, +{ "bdnzlr", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } }, +{ "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } }, +{ "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdzlr", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } }, +{ "bdzlr-", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdzlr+", XLO(19,BODZP,16,0), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdzlrl", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } }, +{ "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, PPC, { 0 } }, +{ "bltlr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bltlr-", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltlr+", XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bltlrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bgtlr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgtlr-", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtlr+", XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bgtlrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "beqlr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "beqlr-", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqlr+", XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "beqlrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bsolr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bsolr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsolr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsor", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bsolrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsorl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bunlr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bunlr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunlr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunlrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgelr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgelr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgelr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bger", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bgelrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgerl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnllr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnllr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnllr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnlr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnllrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnlrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "blelr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "blelr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "blelr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bler", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "blelrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "blerl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnglr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnglr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnglr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bngr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnglrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bngrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnelr", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnelr-", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnelr+", XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bner", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnelrl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnerl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnslr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnslr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnslr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnsr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnslrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnsrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } }, +{ "bnulr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnulr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnulr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnulrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "btlr", XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "btlr-", XLO(19,BOT,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "btlr+", XLO(19,BOTP,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bbtr", XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } }, +{ "btlrl", XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "btlrl-", XLO(19,BOT,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "btlrl+", XLO(19,BOTP,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bbtrl", XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } }, +{ "bflr", XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bflr-", XLO(19,BOF,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bflr+", XLO(19,BOFP,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bbfr", XLO(19,BOF,16,0), XLBOBB_MASK, PWRCOM, { BI } }, +{ "bflrl", XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bflrl-", XLO(19,BOF,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bflrl+", XLO(19,BOFP,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bbfrl", XLO(19,BOF,16,1), XLBOBB_MASK, PWRCOM, { BI } }, +{ "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdztlr", XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdzflr", XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, PPC, { BI } }, +{ "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, PPC, { BI } }, +{ "bclr", XLLK(19,16,0), XLYBB_MASK, PPCCOM, { BO, BI } }, +{ "bclrl", XLLK(19,16,1), XLYBB_MASK, PPCCOM, { BO, BI } }, +{ "bclr+", XLYLK(19,16,1,0), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bclrl+", XLYLK(19,16,1,1), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bclr-", XLYLK(19,16,0,0), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bclrl-", XLYLK(19,16,0,1), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bcr", XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } }, +{ "bcrl", XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } }, + +{ "crnot", XL(19,33), XL_MASK, PPCCOM, { BT, BA, BBA } }, +{ "crnor", XL(19,33), XL_MASK, COM, { BT, BA, BB } }, + +{ "rfi", XL(19,50), 0xffffffff, COM, { 0 } }, +{ "rfci", XL(19,51), 0xffffffff, PPC, { 0 } }, + +{ "rfsvc", XL(19,82), 0xffffffff, POWER, { 0 } }, + +{ "crandc", XL(19,129), XL_MASK, COM, { BT, BA, BB } }, + +{ "isync", XL(19,150), 0xffffffff, PPCCOM, { 0 } }, +{ "ics", XL(19,150), 0xffffffff, PWRCOM, { 0 } }, + +{ "crclr", XL(19,193), XL_MASK, PPCCOM, { BT, BAT, BBA } }, +{ "crxor", XL(19,193), XL_MASK, COM, { BT, BA, BB } }, + +{ "crnand", XL(19,225), XL_MASK, COM, { BT, BA, BB } }, + +{ "crand", XL(19,257), XL_MASK, COM, { BT, BA, BB } }, + +{ "crset", XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } }, +{ "creqv", XL(19,289), XL_MASK, COM, { BT, BA, BB } }, + +{ "crorc", XL(19,417), XL_MASK, COM, { BT, BA, BB } }, + +{ "crmove", XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } }, +{ "cror", XL(19,449), XL_MASK, COM, { BT, BA, BB } }, + +{ "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } }, +{ "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } }, +{ "bltctr", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bltctr-", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltctrl", XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bltctrl-",XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtctr", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgtctr-", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtctrl", XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgtctrl-",XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqctr", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "beqctr-", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqctrl", XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "beqctrl-",XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsoctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bsoctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsoctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bsoctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bunctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bunctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgectr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgectr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgectrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bgectrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnlctr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnlctr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnlctrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnlctrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "blectr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "blectr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "blectrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "blectrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bngctr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bngctr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bngctrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bngctrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnectr", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnectr-", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnectrl", XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnectrl-",XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnsctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnsctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnsctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnsctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnuctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnuctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnuctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } }, +{ "bnuctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } }, +{ "btctr", XLO(19,BOT,528,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "btctr-", XLO(19,BOT,528,0), XLBOBB_MASK, PPC, { BI } }, +{ "btctr+", XLO(19,BOTP,528,0), XLBOBB_MASK, PPC, { BI } }, +{ "btctrl", XLO(19,BOT,528,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "btctrl-", XLO(19,BOT,528,1), XLBOBB_MASK, PPC, { BI } }, +{ "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, PPC, { BI } }, +{ "bfctr", XLO(19,BOF,528,0), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bfctr-", XLO(19,BOF,528,0), XLBOBB_MASK, PPC, { BI } }, +{ "bfctr+", XLO(19,BOFP,528,0), XLBOBB_MASK, PPC, { BI } }, +{ "bfctrl", XLO(19,BOF,528,1), XLBOBB_MASK, PPCCOM, { BI } }, +{ "bfctrl-", XLO(19,BOF,528,1), XLBOBB_MASK, PPC, { BI } }, +{ "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, PPC, { BI } }, +{ "bcctr", XLLK(19,528,0), XLYBB_MASK, PPCCOM, { BO, BI } }, +{ "bcctr-", XLYLK(19,528,0,0), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bcctr+", XLYLK(19,528,1,0), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bcctrl", XLLK(19,528,1), XLYBB_MASK, PPCCOM, { BO, BI } }, +{ "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPC, { BOE, BI } }, +{ "bcc", XLLK(19,528,0), XLBB_MASK, PWRCOM, { BO, BI } }, +{ "bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, { BO, BI } }, + +{ "rlwimi", M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } }, +{ "rlimi", M(20,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } }, + +{ "rlwimi.", M(20,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } }, +{ "rlimi.", M(20,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } }, + +{ "rotlwi", MME(21,31,0), MMBME_MASK, PPCCOM, { RA, RS, SH } }, +{ "clrlwi", MME(21,31,0), MSHME_MASK, PPCCOM, { RA, RS, MB } }, +{ "rlwinm", M(21,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } }, +{ "rlinm", M(21,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } }, +{ "rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, { RA,RS,SH } }, +{ "clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, { RA, RS, MB } }, +{ "rlwinm.", M(21,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } }, +{ "rlinm.", M(21,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } }, + +{ "rlmi", M(22,0), M_MASK, M601, { RA,RS,RB,MBE,ME } }, +{ "rlmi.", M(22,1), M_MASK, M601, { RA,RS,RB,MBE,ME } }, + +{ "rotlw", MME(23,31,0), MMBME_MASK, PPCCOM, { RA, RS, RB } }, +{ "rlwnm", M(23,0), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } }, +{ "rlnm", M(23,0), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } }, +{ "rotlw.", MME(23,31,1), MMBME_MASK, PPCCOM, { RA, RS, RB } }, +{ "rlwnm.", M(23,1), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } }, +{ "rlnm.", M(23,1), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } }, + +{ "nop", OP(24), 0xffffffff, PPCCOM, { 0 } }, +{ "ori", OP(24), OP_MASK, PPCCOM, { RA, RS, UI } }, +{ "oril", OP(24), OP_MASK, PWRCOM, { RA, RS, UI } }, + +{ "oris", OP(25), OP_MASK, PPCCOM, { RA, RS, UI } }, +{ "oriu", OP(25), OP_MASK, PWRCOM, { RA, RS, UI } }, + +{ "xori", OP(26), OP_MASK, PPCCOM, { RA, RS, UI } }, +{ "xoril", OP(26), OP_MASK, PWRCOM, { RA, RS, UI } }, + +{ "xoris", OP(27), OP_MASK, PPCCOM, { RA, RS, UI } }, +{ "xoriu", OP(27), OP_MASK, PWRCOM, { RA, RS, UI } }, + +{ "andi.", OP(28), OP_MASK, PPCCOM, { RA, RS, UI } }, +{ "andil.", OP(28), OP_MASK, PWRCOM, { RA, RS, UI } }, + +{ "andis.", OP(29), OP_MASK, PPCCOM, { RA, RS, UI } }, +{ "andiu.", OP(29), OP_MASK, PWRCOM, { RA, RS, UI } }, + +{ "rotldi", MD(30,0,0), MDMB_MASK, PPC64, { RA, RS, SH6 } }, +{ "clrldi", MD(30,0,0), MDSH_MASK, PPC64, { RA, RS, MB6 } }, +{ "rldicl", MD(30,0,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } }, +{ "rotldi.", MD(30,0,1), MDMB_MASK, PPC64, { RA, RS, SH6 } }, +{ "clrldi.", MD(30,0,1), MDSH_MASK, PPC64, { RA, RS, MB6 } }, +{ "rldicl.", MD(30,0,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } }, + +{ "rldicr", MD(30,1,0), MD_MASK, PPC64, { RA, RS, SH6, ME6 } }, +{ "rldicr.", MD(30,1,1), MD_MASK, PPC64, { RA, RS, SH6, ME6 } }, + +{ "rldic", MD(30,2,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } }, +{ "rldic.", MD(30,2,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } }, + +{ "rldimi", MD(30,3,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } }, +{ "rldimi.", MD(30,3,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } }, + +{ "rotld", MDS(30,8,0), MDSMB_MASK, PPC64, { RA, RS, RB } }, +{ "rldcl", MDS(30,8,0), MDS_MASK, PPC64, { RA, RS, RB, MB6 } }, +{ "rotld.", MDS(30,8,1), MDSMB_MASK, PPC64, { RA, RS, RB } }, +{ "rldcl.", MDS(30,8,1), MDS_MASK, PPC64, { RA, RS, RB, MB6 } }, + +{ "rldcr", MDS(30,9,0), MDS_MASK, PPC64, { RA, RS, RB, ME6 } }, +{ "rldcr.", MDS(30,9,1), MDS_MASK, PPC64, { RA, RS, RB, ME6 } }, + +{ "cmpw", XCMPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } }, +{ "cmpd", XCMPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } }, +{ "cmp", X(31,0), XCMP_MASK, PPCONLY, { BF, L, RA, RB } }, +{ "cmp", X(31,0), XCMPL_MASK, PWRCOM, { BF, RA, RB } }, + +{ "twlgt", XTO(31,4,TOLGT), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tlgt", XTO(31,4,TOLGT), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twllt", XTO(31,4,TOLLT), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tllt", XTO(31,4,TOLLT), XTO_MASK, PWRCOM, { RA, RB } }, +{ "tweq", XTO(31,4,TOEQ), XTO_MASK, PPCCOM, { RA, RB } }, +{ "teq", XTO(31,4,TOEQ), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twlge", XTO(31,4,TOLGE), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tlge", XTO(31,4,TOLGE), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twlnl", XTO(31,4,TOLNL), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tlnl", XTO(31,4,TOLNL), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twlle", XTO(31,4,TOLLE), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tlle", XTO(31,4,TOLLE), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twlng", XTO(31,4,TOLNG), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tlng", XTO(31,4,TOLNG), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twgt", XTO(31,4,TOGT), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tgt", XTO(31,4,TOGT), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twge", XTO(31,4,TOGE), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tge", XTO(31,4,TOGE), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twnl", XTO(31,4,TONL), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tnl", XTO(31,4,TONL), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twlt", XTO(31,4,TOLT), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tlt", XTO(31,4,TOLT), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twle", XTO(31,4,TOLE), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tle", XTO(31,4,TOLE), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twng", XTO(31,4,TONG), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tng", XTO(31,4,TONG), XTO_MASK, PWRCOM, { RA, RB } }, +{ "twne", XTO(31,4,TONE), XTO_MASK, PPCCOM, { RA, RB } }, +{ "tne", XTO(31,4,TONE), XTO_MASK, PWRCOM, { RA, RB } }, +{ "trap", XTO(31,4,TOU), 0xffffffff, PPCCOM, { 0 } }, +{ "tw", X(31,4), X_MASK, PPCCOM, { TO, RA, RB } }, +{ "t", X(31,4), X_MASK, PWRCOM, { TO, RA, RB } }, + +{ "subfc", XO(31,8,0,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "sf", XO(31,8,0,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subc", XO(31,8,0,0), XO_MASK, PPC, { RT, RB, RA } }, +{ "subfc.", XO(31,8,0,1), XO_MASK, PPC, { RT, RA, RB } }, +{ "sf.", XO(31,8,0,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RB, RA } }, +{ "subfco", XO(31,8,1,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "sfo", XO(31,8,1,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subco", XO(31,8,1,0), XO_MASK, PPCCOM, { RT, RB, RA } }, +{ "subfco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "sfo.", XO(31,8,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RB, RA } }, + +{ "mulhdu", XO(31,9,0,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "mulhdu.", XO(31,9,0,1), XO_MASK, PPC64, { RT, RA, RB } }, + +{ "addc", XO(31,10,0,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "a", XO(31,10,0,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addc.", XO(31,10,0,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "a.", XO(31,10,0,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addco", XO(31,10,1,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "ao", XO(31,10,1,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addco.", XO(31,10,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "ao.", XO(31,10,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, + +{ "mulhwu", XO(31,11,0,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "mulhwu.", XO(31,11,0,1), XO_MASK, PPC, { RT, RA, RB } }, + +{ "mfcr", X(31,19), XRARB_MASK, COM, { RT } }, + +{ "lwarx", X(31,20), X_MASK, PPC, { RT, RA, RB } }, + +{ "ldx", X(31,21), X_MASK, PPC64, { RT, RA, RB } }, + +{ "lwzx", X(31,23), X_MASK, PPCCOM, { RT, RA, RB } }, +{ "lx", X(31,23), X_MASK, PWRCOM, { RT, RA, RB } }, + +{ "slw", XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } }, +{ "sl", XRC(31,24,0), X_MASK, PWRCOM, { RA, RS, RB } }, +{ "slw.", XRC(31,24,1), X_MASK, PPCCOM, { RA, RS, RB } }, +{ "sl.", XRC(31,24,1), X_MASK, PWRCOM, { RA, RS, RB } }, + +{ "cntlzw", XRC(31,26,0), XRB_MASK, PPCCOM, { RA, RS } }, +{ "cntlz", XRC(31,26,0), XRB_MASK, PWRCOM, { RA, RS } }, +{ "cntlzw.", XRC(31,26,1), XRB_MASK, PPCCOM, { RA, RS } }, +{ "cntlz.", XRC(31,26,1), XRB_MASK, PWRCOM, { RA, RS } }, + +{ "sld", XRC(31,27,0), X_MASK, PPC64, { RA, RS, RB } }, +{ "sld.", XRC(31,27,1), X_MASK, PPC64, { RA, RS, RB } }, + +{ "and", XRC(31,28,0), X_MASK, COM, { RA, RS, RB } }, +{ "and.", XRC(31,28,1), X_MASK, COM, { RA, RS, RB } }, + +{ "maskg", XRC(31,29,0), X_MASK, M601, { RA, RS, RB } }, +{ "maskg.", XRC(31,29,1), X_MASK, M601, { RA, RS, RB } }, + +{ "cmplw", XCMPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } }, +{ "cmpld", XCMPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } }, +{ "cmpl", X(31,32), XCMP_MASK, PPCONLY, { BF, L, RA, RB } }, +{ "cmpl", X(31,32), XCMPL_MASK, PWRCOM, { BF, RA, RB } }, + +{ "subf", XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "sub", XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } }, +{ "subf.", XO(31,40,0,1), XO_MASK, PPC, { RT, RA, RB } }, +{ "sub.", XO(31,40,0,1), XO_MASK, PPC, { RT, RB, RA } }, +{ "subfo", XO(31,40,1,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "subo", XO(31,40,1,0), XO_MASK, PPC, { RT, RB, RA } }, +{ "subfo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } }, +{ "subo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } }, + +{ "ldux", X(31,53), X_MASK, PPC64, { RT, RAL, RB } }, + +{ "dcbst", X(31,54), XRT_MASK, PPC, { RA, RB } }, + +{ "lwzux", X(31,55), X_MASK, PPCCOM, { RT, RAL, RB } }, +{ "lux", X(31,55), X_MASK, PWRCOM, { RT, RA, RB } }, + +{ "cntlzd", XRC(31,58,0), XRB_MASK, PPC64, { RA, RS } }, +{ "cntlzd.", XRC(31,58,1), XRB_MASK, PPC64, { RA, RS } }, + +{ "andc", XRC(31,60,0), X_MASK, COM, { RA, RS, RB } }, +{ "andc.", XRC(31,60,1), X_MASK, COM, { RA, RS, RB } }, + +{ "tdlgt", XTO(31,68,TOLGT), XTO_MASK, PPC64, { RA, RB } }, +{ "tdllt", XTO(31,68,TOLLT), XTO_MASK, PPC64, { RA, RB } }, +{ "tdeq", XTO(31,68,TOEQ), XTO_MASK, PPC64, { RA, RB } }, +{ "tdlge", XTO(31,68,TOLGE), XTO_MASK, PPC64, { RA, RB } }, +{ "tdlnl", XTO(31,68,TOLNL), XTO_MASK, PPC64, { RA, RB } }, +{ "tdlle", XTO(31,68,TOLLE), XTO_MASK, PPC64, { RA, RB } }, +{ "tdlng", XTO(31,68,TOLNG), XTO_MASK, PPC64, { RA, RB } }, +{ "tdgt", XTO(31,68,TOGT), XTO_MASK, PPC64, { RA, RB } }, +{ "tdge", XTO(31,68,TOGE), XTO_MASK, PPC64, { RA, RB } }, +{ "tdnl", XTO(31,68,TONL), XTO_MASK, PPC64, { RA, RB } }, +{ "tdlt", XTO(31,68,TOLT), XTO_MASK, PPC64, { RA, RB } }, +{ "tdle", XTO(31,68,TOLE), XTO_MASK, PPC64, { RA, RB } }, +{ "tdng", XTO(31,68,TONG), XTO_MASK, PPC64, { RA, RB } }, +{ "tdne", XTO(31,68,TONE), XTO_MASK, PPC64, { RA, RB } }, +{ "td", X(31,68), X_MASK, PPC64, { TO, RA, RB } }, + +{ "mulhd", XO(31,73,0,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "mulhd.", XO(31,73,0,1), XO_MASK, PPC64, { RT, RA, RB } }, + +{ "mulhw", XO(31,75,0,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "mulhw.", XO(31,75,0,1), XO_MASK, PPC, { RT, RA, RB } }, + +{ "mfmsr", X(31,83), XRARB_MASK, COM, { RT } }, + +{ "ldarx", X(31,84), X_MASK, PPC64, { RT, RA, RB } }, + +{ "dcbf", X(31,86), XRT_MASK, PPC, { RA, RB } }, + +{ "lbzx", X(31,87), X_MASK, COM, { RT, RA, RB } }, + +{ "neg", XO(31,104,0,0), XORB_MASK, COM, { RT, RA } }, +{ "neg.", XO(31,104,0,1), XORB_MASK, COM, { RT, RA } }, +{ "nego", XO(31,104,1,0), XORB_MASK, COM, { RT, RA } }, +{ "nego.", XO(31,104,1,1), XORB_MASK, COM, { RT, RA } }, + +{ "mul", XO(31,107,0,0), XO_MASK, M601, { RT, RA, RB } }, +{ "mul.", XO(31,107,0,1), XO_MASK, M601, { RT, RA, RB } }, +{ "mulo", XO(31,107,1,0), XO_MASK, M601, { RT, RA, RB } }, +{ "mulo.", XO(31,107,1,1), XO_MASK, M601, { RT, RA, RB } }, + +{ "clf", X(31,118), XRB_MASK, POWER, { RT, RA } }, + +{ "lbzux", X(31,119), X_MASK, COM, { RT, RAL, RB } }, + +{ "not", XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } }, +{ "nor", XRC(31,124,0), X_MASK, COM, { RA, RS, RB } }, +{ "not.", XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } }, +{ "nor.", XRC(31,124,1), X_MASK, COM, { RA, RS, RB } }, + +{ "subfe", XO(31,136,0,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "sfe", XO(31,136,0,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subfe.", XO(31,136,0,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "sfe.", XO(31,136,0,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subfeo", XO(31,136,1,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "sfeo", XO(31,136,1,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "subfeo.", XO(31,136,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "sfeo.", XO(31,136,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, + +{ "adde", XO(31,138,0,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "ae", XO(31,138,0,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "adde.", XO(31,138,0,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "ae.", XO(31,138,0,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addeo", XO(31,138,1,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "aeo", XO(31,138,1,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addeo.", XO(31,138,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "aeo.", XO(31,138,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, + +{ "mtcr", XFXM(31,144,0xff), XFXFXM_MASK|FXM_MASK, COM, { RS }}, +{ "mtcrf", X(31,144), XFXFXM_MASK, COM, { FXM, RS } }, + +{ "mtmsr", X(31,146), XRARB_MASK, COM, { RS } }, + +{ "stdx", X(31,149), X_MASK, PPC64, { RS, RA, RB } }, + +{ "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA, RB } }, + +{ "stwx", X(31,151), X_MASK, PPCCOM, { RS, RA, RB } }, +{ "stx", X(31,151), X_MASK, PWRCOM, { RS, RA, RB } }, + +{ "slq", XRC(31,152,0), X_MASK, M601, { RA, RS, RB } }, +{ "slq.", XRC(31,152,1), X_MASK, M601, { RA, RS, RB } }, + +{ "sle", XRC(31,153,0), X_MASK, M601, { RA, RS, RB } }, +{ "sle.", XRC(31,153,1), X_MASK, M601, { RA, RS, RB } }, + +{ "stdux", X(31,181), X_MASK, PPC64, { RS, RAS, RB } }, + +{ "stwux", X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } }, +{ "stux", X(31,183), X_MASK, PWRCOM, { RS, RA, RB } }, + +{ "sliq", XRC(31,184,0), X_MASK, M601, { RA, RS, SH } }, +{ "sliq.", XRC(31,184,1), X_MASK, M601, { RA, RS, SH } }, + +{ "subfze", XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfze", XO(31,200,0,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "subfze.", XO(31,200,0,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfze.", XO(31,200,0,1), XORB_MASK, PWRCOM, { RT, RA } }, +{ "subfzeo", XO(31,200,1,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfzeo", XO(31,200,1,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "subfzeo.",XO(31,200,1,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfzeo.", XO(31,200,1,1), XORB_MASK, PWRCOM, { RT, RA } }, + +{ "addze", XO(31,202,0,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "aze", XO(31,202,0,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "addze.", XO(31,202,0,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "aze.", XO(31,202,0,1), XORB_MASK, PWRCOM, { RT, RA } }, +{ "addzeo", XO(31,202,1,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "azeo", XO(31,202,1,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "addzeo.", XO(31,202,1,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "azeo.", XO(31,202,1,1), XORB_MASK, PWRCOM, { RT, RA } }, + +{ "mtsr", X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } }, + +{ "stdcx.", XRC(31,214,1), X_MASK, PPC64, { RS, RA, RB } }, + +{ "stbx", X(31,215), X_MASK, COM, { RS, RA, RB } }, + +{ "sllq", XRC(31,216,0), X_MASK, M601, { RA, RS, RB } }, +{ "sllq.", XRC(31,216,1), X_MASK, M601, { RA, RS, RB } }, + +{ "sleq", XRC(31,217,0), X_MASK, M601, { RA, RS, RB } }, +{ "sleq.", XRC(31,217,1), X_MASK, M601, { RA, RS, RB } }, + +{ "subfme", XO(31,232,0,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfme", XO(31,232,0,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "subfme.", XO(31,232,0,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfme.", XO(31,232,0,1), XORB_MASK, PWRCOM, { RT, RA } }, +{ "subfmeo", XO(31,232,1,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfmeo", XO(31,232,1,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "subfmeo.",XO(31,232,1,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "sfmeo.", XO(31,232,1,1), XORB_MASK, PWRCOM, { RT, RA } }, + +{ "mulld", XO(31,233,0,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "mulld.", XO(31,233,0,1), XO_MASK, PPC64, { RT, RA, RB } }, +{ "mulldo", XO(31,233,1,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "mulldo.", XO(31,233,1,1), XO_MASK, PPC64, { RT, RA, RB } }, + +{ "addme", XO(31,234,0,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "ame", XO(31,234,0,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "addme.", XO(31,234,0,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "ame.", XO(31,234,0,1), XORB_MASK, PWRCOM, { RT, RA } }, +{ "addmeo", XO(31,234,1,0), XORB_MASK, PPCCOM, { RT, RA } }, +{ "ameo", XO(31,234,1,0), XORB_MASK, PWRCOM, { RT, RA } }, +{ "addmeo.", XO(31,234,1,1), XORB_MASK, PPCCOM, { RT, RA } }, +{ "ameo.", XO(31,234,1,1), XORB_MASK, PWRCOM, { RT, RA } }, + +{ "mullw", XO(31,235,0,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "muls", XO(31,235,0,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "mullw.", XO(31,235,0,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "muls.", XO(31,235,0,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "mullwo", XO(31,235,1,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "mulso", XO(31,235,1,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "mullwo.", XO(31,235,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "mulso.", XO(31,235,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, + +{ "mtsrin", X(31,242), XRA_MASK, PPC32, { RS, RB } }, +{ "mtsri", X(31,242), XRA_MASK, POWER32, { RS, RB } }, + +{ "dcbtst", X(31,246), XRT_MASK, PPC, { RA, RB } }, + +{ "stbux", X(31,247), X_MASK, COM, { RS, RAS, RB } }, + +{ "slliq", XRC(31,248,0), X_MASK, M601, { RA, RS, SH } }, +{ "slliq.", XRC(31,248,1), X_MASK, M601, { RA, RS, SH } }, + +{ "doz", XO(31,264,0,0), XO_MASK, M601, { RT, RA, RB } }, +{ "doz.", XO(31,264,0,1), XO_MASK, M601, { RT, RA, RB } }, +{ "dozo", XO(31,264,1,0), XO_MASK, M601, { RT, RA, RB } }, +{ "dozo.", XO(31,264,1,1), XO_MASK, M601, { RT, RA, RB } }, + +{ "add", XO(31,266,0,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "cax", XO(31,266,0,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "add.", XO(31,266,0,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "cax.", XO(31,266,0,1), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addo", XO(31,266,1,0), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "caxo", XO(31,266,1,0), XO_MASK, PWRCOM, { RT, RA, RB } }, +{ "addo.", XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, +{ "caxo.", XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, + +{ "lscbx", XRC(31,277,0), X_MASK, M601, { RT, RA, RB } }, +{ "lscbx.", XRC(31,277,1), X_MASK, M601, { RT, RA, RB } }, + +{ "dcbt", X(31,278), XRT_MASK, PPC, { RA, RB } }, + +{ "lhzx", X(31,279), X_MASK, COM, { RT, RA, RB } }, + +{ "icbt", X(31,262), XRT_MASK, PPC, { RA, RB } }, + +{ "eqv", XRC(31,284,0), X_MASK, COM, { RA, RS, RB } }, +{ "eqv.", XRC(31,284,1), X_MASK, COM, { RA, RS, RB } }, + +{ "tlbie", X(31,306), XRTRA_MASK, PPCCOM, { RB } }, +{ "tlbi", X(31,306), XRTRA_MASK, PWRCOM, { RB } }, + +{ "eciwx", X(31,310), X_MASK, PPC, { RT, RA, RB } }, + +{ "lhzux", X(31,311), X_MASK, COM, { RT, RAL, RB } }, + +{ "xor", XRC(31,316,0), X_MASK, COM, { RA, RS, RB } }, +{ "xor.", XRC(31,316,1), X_MASK, COM, { RA, RS, RB } }, + +{ "mfdcr", X(31,323), X_MASK, PPC, { RT, SPR } }, + +{ "div", XO(31,331,0,0), XO_MASK, M601, { RT, RA, RB } }, +{ "div.", XO(31,331,0,1), XO_MASK, M601, { RT, RA, RB } }, +{ "divo", XO(31,331,1,0), XO_MASK, M601, { RT, RA, RB } }, +{ "divo.", XO(31,331,1,1), XO_MASK, M601, { RT, RA, RB } }, + +{ "mfmq", XSPR(31,339,0), XSPR_MASK, M601, { RT } }, +{ "mfxer", XSPR(31,339,1), XSPR_MASK, COM, { RT } }, +{ "mfrtcu", XSPR(31,339,4), XSPR_MASK, COM, { RT } }, +{ "mfrtcl", XSPR(31,339,5), XSPR_MASK, COM, { RT } }, +{ "mfdec", XSPR(31,339,6), XSPR_MASK, MFDEC1, { RT } }, +{ "mflr", XSPR(31,339,8), XSPR_MASK, COM, { RT } }, +{ "mfctr", XSPR(31,339,9), XSPR_MASK, COM, { RT } }, +{ "mftid", XSPR(31,339,17), XSPR_MASK, POWER, { RT } }, +{ "mfdsisr", XSPR(31,339,18), XSPR_MASK, COM, { RT } }, +{ "mfdar", XSPR(31,339,19), XSPR_MASK, COM, { RT } }, +{ "mfdec", XSPR(31,339,22), XSPR_MASK, MFDEC2, { RT } }, +{ "mfsdr0", XSPR(31,339,24), XSPR_MASK, POWER, { RT } }, +{ "mfsdr1", XSPR(31,339,25), XSPR_MASK, COM, { RT } }, +{ "mfsrr0", XSPR(31,339,26), XSPR_MASK, COM, { RT } }, +{ "mfsrr1", XSPR(31,339,27), XSPR_MASK, COM, { RT } }, +{ "mfsprg", XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } }, +{ "mfasr", XSPR(31,339,280), XSPR_MASK, PPC64, { RT } }, +{ "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } }, +{ "mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, { RT } }, +{ "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, +{ "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, +{ "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, +{ "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, +{ "mfspr", X(31,339), X_MASK, COM, { RT, SPR } }, + +{ "lwax", X(31,341), X_MASK, PPC64, { RT, RA, RB } }, + +{ "lhax", X(31,343), X_MASK, COM, { RT, RA, RB } }, + +{ "dccci", X(31,454), XRT_MASK, PPC, { RA, RB } }, + +{ "abs", XO(31,360,0,0), XORB_MASK, M601, { RT, RA } }, +{ "abs.", XO(31,360,0,1), XORB_MASK, M601, { RT, RA } }, +{ "abso", XO(31,360,1,0), XORB_MASK, M601, { RT, RA } }, +{ "abso.", XO(31,360,1,1), XORB_MASK, M601, { RT, RA } }, + +{ "divs", XO(31,363,0,0), XO_MASK, M601, { RT, RA, RB } }, +{ "divs.", XO(31,363,0,1), XO_MASK, M601, { RT, RA, RB } }, +{ "divso", XO(31,363,1,0), XO_MASK, M601, { RT, RA, RB } }, +{ "divso.", XO(31,363,1,1), XO_MASK, M601, { RT, RA, RB } }, + +{ "tlbia", X(31,370), 0xffffffff, PPC, { 0 } }, + +{ "mftbu", XSPR(31,371,269), XSPR_MASK, PPC, { RT } }, +{ "mftb", X(31,371), X_MASK, PPC, { RT, TBR } }, + +{ "lwaux", X(31,373), X_MASK, PPC64, { RT, RAL, RB } }, + +{ "lhaux", X(31,375), X_MASK, COM, { RT, RAL, RB } }, + +{ "sthx", X(31,407), X_MASK, COM, { RS, RA, RB } }, + +{ "lfqx", X(31,791), X_MASK, POWER2, { FRT, RA, RB } }, + +{ "lfqux", X(31,823), X_MASK, POWER2, { FRT, RA, RB } }, + +{ "stfqx", X(31,919), X_MASK, POWER2, { FRS, RA, RB } }, + +{ "stfqux", X(31,951), X_MASK, POWER2, { FRS, RA, RB } }, + +{ "orc", XRC(31,412,0), X_MASK, COM, { RA, RS, RB } }, +{ "orc.", XRC(31,412,1), X_MASK, COM, { RA, RS, RB } }, + +{ "sradi", XS(31,413,0), XS_MASK, PPC64, { RA, RS, SH6 } }, +{ "sradi.", XS(31,413,1), XS_MASK, PPC64, { RA, RS, SH6 } }, + +{ "slbie", X(31,434), XRTRA_MASK, PPC64, { RB } }, + +{ "ecowx", X(31,438), X_MASK, PPC, { RT, RA, RB } }, + +{ "sthux", X(31,439), X_MASK, COM, { RS, RAS, RB } }, + +{ "mr", XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } }, +{ "or", XRC(31,444,0), X_MASK, COM, { RA, RS, RB } }, +{ "mr.", XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } }, +{ "or.", XRC(31,444,1), X_MASK, COM, { RA, RS, RB } }, + +{ "mtdcr", X(31,451), X_MASK, PPC, { SPR, RS } }, + +{ "divdu", XO(31,457,0,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "divdu.", XO(31,457,0,1), XO_MASK, PPC64, { RT, RA, RB } }, +{ "divduo", XO(31,457,1,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "divduo.", XO(31,457,1,1), XO_MASK, PPC64, { RT, RA, RB } }, + +{ "divwu", XO(31,459,0,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "divwu.", XO(31,459,0,1), XO_MASK, PPC, { RT, RA, RB } }, +{ "divwuo", XO(31,459,1,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "divwuo.", XO(31,459,1,1), XO_MASK, PPC, { RT, RA, RB } }, + +{ "mtmq", XSPR(31,467,0), XSPR_MASK, M601, { RS } }, +{ "mtxer", XSPR(31,467,1), XSPR_MASK, COM, { RS } }, +{ "mtlr", XSPR(31,467,8), XSPR_MASK, COM, { RS } }, +{ "mtctr", XSPR(31,467,9), XSPR_MASK, COM, { RS } }, +{ "mttid", XSPR(31,467,17), XSPR_MASK, POWER, { RS } }, +{ "mtdsisr", XSPR(31,467,18), XSPR_MASK, COM, { RS } }, +{ "mtdar", XSPR(31,467,19), XSPR_MASK, COM, { RS } }, +{ "mtrtcu", XSPR(31,467,20), XSPR_MASK, COM, { RS } }, +{ "mtrtcl", XSPR(31,467,21), XSPR_MASK, COM, { RS } }, +{ "mtdec", XSPR(31,467,22), XSPR_MASK, COM, { RS } }, +{ "mtsdr0", XSPR(31,467,24), XSPR_MASK, POWER, { RS } }, +{ "mtsdr1", XSPR(31,467,25), XSPR_MASK, COM, { RS } }, +{ "mtsrr0", XSPR(31,467,26), XSPR_MASK, COM, { RS } }, +{ "mtsrr1", XSPR(31,467,27), XSPR_MASK, COM, { RS } }, +{ "mtsprg", XSPR(31,467,272), XSPRG_MASK, PPC, { SPRG, RS } }, +{ "mtasr", XSPR(31,467,280), XSPR_MASK, PPC64, { RS } }, +{ "mtear", XSPR(31,467,282), XSPR_MASK, PPC, { RS } }, +{ "mttbl", XSPR(31,467,284), XSPR_MASK, PPC, { RS } }, +{ "mttbu", XSPR(31,467,285), XSPR_MASK, PPC, { RS } }, +{ "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, +{ "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, +{ "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, +{ "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, +{ "mtspr", X(31,467), X_MASK, COM, { SPR, RS } }, + +{ "dcbi", X(31,470), XRT_MASK, PPC, { RA, RB } }, + +{ "nand", XRC(31,476,0), X_MASK, COM, { RA, RS, RB } }, +{ "nand.", XRC(31,476,1), X_MASK, COM, { RA, RS, RB } }, + +{ "nabs", XO(31,488,0,0), XORB_MASK, M601, { RT, RA } }, +{ "nabs.", XO(31,488,0,1), XORB_MASK, M601, { RT, RA } }, +{ "nabso", XO(31,488,1,0), XORB_MASK, M601, { RT, RA } }, +{ "nabso.", XO(31,488,1,1), XORB_MASK, M601, { RT, RA } }, + +{ "divd", XO(31,489,0,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "divd.", XO(31,489,0,1), XO_MASK, PPC64, { RT, RA, RB } }, +{ "divdo", XO(31,489,1,0), XO_MASK, PPC64, { RT, RA, RB } }, +{ "divdo.", XO(31,489,1,1), XO_MASK, PPC64, { RT, RA, RB } }, + +{ "divw", XO(31,491,0,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "divw.", XO(31,491,0,1), XO_MASK, PPC, { RT, RA, RB } }, +{ "divwo", XO(31,491,1,0), XO_MASK, PPC, { RT, RA, RB } }, +{ "divwo.", XO(31,491,1,1), XO_MASK, PPC, { RT, RA, RB } }, + +{ "slbia", X(31,498), 0xffffffff, PPC64, { 0 } }, + +{ "cli", X(31,502), XRB_MASK, POWER, { RT, RA } }, + +{ "mcrxr", X(31,512), XRARB_MASK|(3<<21), COM, { BF } }, + +{ "clcs", X(31,531), XRB_MASK, M601, { RT, RA } }, + +{ "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA, RB } }, +{ "lsx", X(31,533), X_MASK, PWRCOM, { RT, RA, RB } }, + +{ "lwbrx", X(31,534), X_MASK, PPCCOM, { RT, RA, RB } }, +{ "lbrx", X(31,534), X_MASK, PWRCOM, { RT, RA, RB } }, + +{ "lfsx", X(31,535), X_MASK, COM, { FRT, RA, RB } }, + +{ "srw", XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } }, +{ "sr", XRC(31,536,0), X_MASK, PWRCOM, { RA, RS, RB } }, +{ "srw.", XRC(31,536,1), X_MASK, PPCCOM, { RA, RS, RB } }, +{ "sr.", XRC(31,536,1), X_MASK, PWRCOM, { RA, RS, RB } }, + +{ "rrib", XRC(31,537,0), X_MASK, M601, { RA, RS, RB } }, +{ "rrib.", XRC(31,537,1), X_MASK, M601, { RA, RS, RB } }, + +{ "srd", XRC(31,539,0), X_MASK, PPC64, { RA, RS, RB } }, +{ "srd.", XRC(31,539,1), X_MASK, PPC64, { RA, RS, RB } }, + +{ "maskir", XRC(31,541,0), X_MASK, M601, { RA, RS, RB } }, +{ "maskir.", XRC(31,541,1), X_MASK, M601, { RA, RS, RB } }, + +{ "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } }, + +{ "lfsux", X(31,567), X_MASK, COM, { FRT, RAS, RB } }, + +{ "mfsr", X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } }, + +{ "lswi", X(31,597), X_MASK, PPCCOM, { RT, RA, NB } }, +{ "lsi", X(31,597), X_MASK, PWRCOM, { RT, RA, NB } }, + +{ "sync", X(31,598), 0xffffffff, PPCCOM, { 0 } }, +{ "dcs", X(31,598), 0xffffffff, PWRCOM, { 0 } }, + +{ "lfdx", X(31,599), X_MASK, COM, { FRT, RA, RB } }, + +{ "mfsri", X(31,627), X_MASK, PWRCOM, { RT, RA, RB } }, + +{ "dclst", X(31,630), XRB_MASK, PWRCOM, { RS, RA } }, + +{ "lfdux", X(31,631), X_MASK, COM, { FRT, RAS, RB } }, + +{ "mfsrin", X(31,659), XRA_MASK, PPC32, { RT, RB } }, + +{ "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA, RB } }, +{ "stsx", X(31,661), X_MASK, PWRCOM, { RS, RA, RB } }, + +{ "stwbrx", X(31,662), X_MASK, PPCCOM, { RS, RA, RB } }, +{ "stbrx", X(31,662), X_MASK, PWRCOM, { RS, RA, RB } }, + +{ "stfsx", X(31,663), X_MASK, COM, { FRS, RA, RB } }, + +{ "srq", XRC(31,664,0), X_MASK, M601, { RA, RS, RB } }, +{ "srq.", XRC(31,664,1), X_MASK, M601, { RA, RS, RB } }, + +{ "sre", XRC(31,665,0), X_MASK, M601, { RA, RS, RB } }, +{ "sre.", XRC(31,665,1), X_MASK, M601, { RA, RS, RB } }, + +{ "stfsux", X(31,695), X_MASK, COM, { FRS, RAS, RB } }, + +{ "sriq", XRC(31,696,0), X_MASK, M601, { RA, RS, SH } }, +{ "sriq.", XRC(31,696,1), X_MASK, M601, { RA, RS, SH } }, + +{ "stswi", X(31,725), X_MASK, PPCCOM, { RS, RA, NB } }, +{ "stsi", X(31,725), X_MASK, PWRCOM, { RS, RA, NB } }, + +{ "stfdx", X(31,727), X_MASK, COM, { FRS, RA, RB } }, + +{ "srlq", XRC(31,728,0), X_MASK, M601, { RA, RS, RB } }, +{ "srlq.", XRC(31,728,1), X_MASK, M601, { RA, RS, RB } }, + +{ "sreq", XRC(31,729,0), X_MASK, M601, { RA, RS, RB } }, +{ "sreq.", XRC(31,729,1), X_MASK, M601, { RA, RS, RB } }, + +{ "stfdux", X(31,759), X_MASK, COM, { FRS, RAS, RB } }, + +{ "srliq", XRC(31,760,0), X_MASK, M601, { RA, RS, SH } }, +{ "srliq.", XRC(31,760,1), X_MASK, M601, { RA, RS, SH } }, + +{ "lhbrx", X(31,790), X_MASK, COM, { RT, RA, RB } }, + +{ "sraw", XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } }, +{ "sra", XRC(31,792,0), X_MASK, PWRCOM, { RA, RS, RB } }, +{ "sraw.", XRC(31,792,1), X_MASK, PPCCOM, { RA, RS, RB } }, +{ "sra.", XRC(31,792,1), X_MASK, PWRCOM, { RA, RS, RB } }, + +{ "srad", XRC(31,794,0), X_MASK, PPC64, { RA, RS, RB } }, +{ "srad.", XRC(31,794,1), X_MASK, PPC64, { RA, RS, RB } }, + +{ "rac", X(31,818), X_MASK, PWRCOM, { RT, RA, RB } }, + +{ "srawi", XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } }, +{ "srai", XRC(31,824,0), X_MASK, PWRCOM, { RA, RS, SH } }, +{ "srawi.", XRC(31,824,1), X_MASK, PPCCOM, { RA, RS, SH } }, +{ "srai.", XRC(31,824,1), X_MASK, PWRCOM, { RA, RS, SH } }, + +{ "eieio", X(31,854), 0xffffffff, PPC, { 0 } }, + +{ "sthbrx", X(31,918), X_MASK, COM, { RS, RA, RB } }, + +{ "sraq", XRC(31,920,0), X_MASK, M601, { RA, RS, RB } }, +{ "sraq.", XRC(31,920,1), X_MASK, M601, { RA, RS, RB } }, + +{ "srea", XRC(31,921,0), X_MASK, M601, { RA, RS, RB } }, +{ "srea.", XRC(31,921,1), X_MASK, M601, { RA, RS, RB } }, + +{ "extsh", XRC(31,922,0), XRB_MASK, PPCCOM, { RA, RS } }, +{ "exts", XRC(31,922,0), XRB_MASK, PWRCOM, { RA, RS } }, +{ "extsh.", XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } }, +{ "exts.", XRC(31,922,1), XRB_MASK, PWRCOM, { RA, RS } }, + +{ "sraiq", XRC(31,952,0), X_MASK, M601, { RA, RS, SH } }, +{ "sraiq.", XRC(31,952,1), X_MASK, M601, { RA, RS, SH } }, + +{ "extsb", XRC(31,954,0), XRB_MASK, PPC, { RA, RS} }, +{ "extsb.", XRC(31,954,1), XRB_MASK, PPC, { RA, RS} }, + +{ "iccci", X(31,966), XRT_MASK, PPC, { RA, RB } }, + +{ "icbi", X(31,982), XRT_MASK, PPC, { RA, RB } }, + +{ "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA, RB } }, + +{ "extsw", XRC(31,986,0), XRB_MASK, PPC, { RA, RS } }, +{ "extsw.", XRC(31,986,1), XRB_MASK, PPC, { RA, RS } }, + +{ "dcbz", X(31,1014), XRT_MASK, PPC, { RA, RB } }, +{ "dclz", X(31,1014), XRT_MASK, PPC, { RA, RB } }, + +{ "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA } }, +{ "l", OP(32), OP_MASK, PWRCOM, { RT, D, RA } }, + +{ "lwzu", OP(33), OP_MASK, PPCCOM, { RT, D, RAL } }, +{ "lu", OP(33), OP_MASK, PWRCOM, { RT, D, RA } }, + +{ "lbz", OP(34), OP_MASK, COM, { RT, D, RA } }, + +{ "lbzu", OP(35), OP_MASK, COM, { RT, D, RAL } }, + +{ "stw", OP(36), OP_MASK, PPCCOM, { RS, D, RA } }, +{ "st", OP(36), OP_MASK, PWRCOM, { RS, D, RA } }, + +{ "stwu", OP(37), OP_MASK, PPCCOM, { RS, D, RAS } }, +{ "stu", OP(37), OP_MASK, PWRCOM, { RS, D, RA } }, + +{ "stb", OP(38), OP_MASK, COM, { RS, D, RA } }, + +{ "stbu", OP(39), OP_MASK, COM, { RS, D, RAS } }, + +{ "lhz", OP(40), OP_MASK, COM, { RT, D, RA } }, + +{ "lhzu", OP(41), OP_MASK, COM, { RT, D, RAL } }, + +{ "lha", OP(42), OP_MASK, COM, { RT, D, RA } }, + +{ "lhau", OP(43), OP_MASK, COM, { RT, D, RAL } }, + +{ "sth", OP(44), OP_MASK, COM, { RS, D, RA } }, + +{ "sthu", OP(45), OP_MASK, COM, { RS, D, RAS } }, + +{ "lmw", OP(46), OP_MASK, PPCCOM, { RT, D, RAM } }, +{ "lm", OP(46), OP_MASK, PWRCOM, { RT, D, RA } }, + +{ "stmw", OP(47), OP_MASK, PPCCOM, { RS, D, RA } }, +{ "stm", OP(47), OP_MASK, PWRCOM, { RS, D, RA } }, + +{ "lfs", OP(48), OP_MASK, COM, { FRT, D, RA } }, + +{ "lfsu", OP(49), OP_MASK, COM, { FRT, D, RAS } }, + +{ "lfd", OP(50), OP_MASK, COM, { FRT, D, RA } }, + +{ "lfdu", OP(51), OP_MASK, COM, { FRT, D, RAS } }, + +{ "stfs", OP(52), OP_MASK, COM, { FRS, D, RA } }, + +{ "stfsu", OP(53), OP_MASK, COM, { FRS, D, RAS } }, + +{ "stfd", OP(54), OP_MASK, COM, { FRS, D, RA } }, + +{ "stfdu", OP(55), OP_MASK, COM, { FRS, D, RAS } }, + +{ "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA } }, + +{ "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA } }, + +{ "ld", DSO(58,0), DS_MASK, PPC64, { RT, DS, RA } }, + +{ "ldu", DSO(58,1), DS_MASK, PPC64, { RT, DS, RAL } }, + +{ "lwa", DSO(58,2), DS_MASK, PPC64, { RT, DS, RA } }, + +{ "fdivs", A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } }, +{ "fdivs.", A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } }, + +{ "fsubs", A(59,20,0), AFRC_MASK, PPC, { FRT, FRA, FRB } }, +{ "fsubs.", A(59,20,1), AFRC_MASK, PPC, { FRT, FRA, FRB } }, + +{ "fadds", A(59,21,0), AFRC_MASK, PPC, { FRT, FRA, FRB } }, +{ "fadds.", A(59,21,1), AFRC_MASK, PPC, { FRT, FRA, FRB } }, + +{ "fsqrts", A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } }, +{ "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } }, + +{ "fres", A(59,24,0), AFRAFRC_MASK, PPC, { FRT, FRB } }, +{ "fres.", A(59,24,1), AFRAFRC_MASK, PPC, { FRT, FRB } }, + +{ "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } }, +{ "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } }, + +{ "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, +{ "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, + +{ "fmadds", A(59,29,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, +{ "fmadds.", A(59,29,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, + +{ "fnmsubs", A(59,30,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, +{ "fnmsubs.",A(59,30,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, + +{ "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, +{ "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, + +{ "stfq", OP(60), OP_MASK, POWER2, { FRS, D, RA } }, + +{ "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } }, + +{ "std", DSO(62,0), DS_MASK, PPC64, { RS, DS, RA } }, + +{ "stdu", DSO(62,1), DS_MASK, PPC64, { RS, DS, RAS } }, + +{ "fcmpu", X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } }, + +{ "frsp", XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } }, +{ "frsp.", XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } }, + +{ "fctiw", XRC(63,14,0), XRA_MASK, PPCCOM, { FRT, FRB } }, +{ "fcir", XRC(63,14,0), XRA_MASK, POWER2, { FRT, FRB } }, +{ "fctiw.", XRC(63,14,1), XRA_MASK, PPCCOM, { FRT, FRB } }, +{ "fcir.", XRC(63,14,1), XRA_MASK, POWER2, { FRT, FRB } }, + +{ "fctiwz", XRC(63,15,0), XRA_MASK, PPCCOM, { FRT, FRB } }, +{ "fcirz", XRC(63,15,0), XRA_MASK, POWER2, { FRT, FRB } }, +{ "fctiwz.", XRC(63,15,1), XRA_MASK, PPCCOM, { FRT, FRB } }, +{ "fcirz.", XRC(63,15,1), XRA_MASK, POWER2, { FRT, FRB } }, + +{ "fdiv", A(63,18,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } }, +{ "fd", A(63,18,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } }, +{ "fdiv.", A(63,18,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } }, +{ "fd.", A(63,18,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } }, + +{ "fsub", A(63,20,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } }, +{ "fs", A(63,20,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } }, +{ "fsub.", A(63,20,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } }, +{ "fs.", A(63,20,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } }, + +{ "fadd", A(63,21,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } }, +{ "fa", A(63,21,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } }, +{ "fadd.", A(63,21,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } }, +{ "fa.", A(63,21,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } }, + +{ "fsqrt", A(63,22,0), AFRAFRC_MASK, POWER2, { FRT, FRB } }, +{ "fsqrt.", A(63,22,1), AFRAFRC_MASK, POWER2, { FRT, FRB } }, + +{ "fsel", A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, +{ "fsel.", A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, + +{ "fmul", A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } }, +{ "fm", A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } }, +{ "fmul.", A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } }, +{ "fm.", A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } }, + +{ "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } }, +{ "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } }, + +{ "fmsub", A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fms", A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, +{ "fmsub.", A(63,28,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fms.", A(63,28,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, + +{ "fmadd", A(63,29,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fma", A(63,29,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, +{ "fmadd.", A(63,29,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fma.", A(63,29,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, + +{ "fnmsub", A(63,30,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fnms", A(63,30,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, +{ "fnmsub.", A(63,30,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fnms.", A(63,30,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, + +{ "fnmadd", A(63,31,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fnma", A(63,31,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, +{ "fnmadd.", A(63,31,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, +{ "fnma.", A(63,31,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, + +{ "fcmpo", X(63,30), X_MASK|(3<<21), COM, { BF, FRA, FRB } }, + +{ "mtfsb1", XRC(63,38,0), XRARB_MASK, COM, { BT } }, +{ "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } }, + +{ "fneg", XRC(63,40,0), XRA_MASK, COM, { FRT, FRB } }, +{ "fneg.", XRC(63,40,1), XRA_MASK, COM, { FRT, FRB } }, + +{ "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } }, + +{ "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } }, +{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } }, + +{ "fmr", XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } }, +{ "fmr.", XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } }, + +{ "mtfsfi", XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } }, +{ "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } }, + +{ "fnabs", XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } }, +{ "fnabs.", XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } }, + +{ "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } }, +{ "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } }, + +{ "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } }, +{ "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } }, + +{ "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } }, +{ "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } }, + +{ "fctid", XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } }, +{ "fctid.", XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } }, + +{ "fctidz", XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } }, +{ "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } }, + +{ "fcfid", XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } }, +{ "fcfid.", XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } }, + +}; + +const int powerpc_num_opcodes = + sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]); + +/* The macro table. This is only used by the assembler. */ + +const struct powerpc_macro powerpc_macros[] = { +{ "extldi", 4, PPC64, "rldicr %0,%1,%3,(%2)-1" }, +{ "extldi.", 4, PPC64, "rldicr. %0,%1,%3,(%2)-1" }, +{ "extrdi", 4, PPC64, "rldicl %0,%1,(%2)+(%3),64-(%2)" }, +{ "extrdi.", 4, PPC64, "rldicl. %0,%1,(%2)+(%3),64-(%2)" }, +{ "insrdi", 4, PPC64, "rldimi %0,%1,64-((%2)+(%3)),%3" }, +{ "insrdi.", 4, PPC64, "rldimi. %0,%1,64-((%2)+(%3)),%3" }, +{ "rotrdi", 3, PPC64, "rldicl %0,%1,64-(%2),0" }, +{ "rotrdi.", 3, PPC64, "rldicl. %0,%1,64-(%2),0" }, +{ "sldi", 3, PPC64, "rldicr %0,%1,%2,63-(%2)" }, +{ "sldi.", 3, PPC64, "rldicr. %0,%1,%2,63-(%2)" }, +{ "srdi", 3, PPC64, "rldicl %0,%1,64-(%2),%2" }, +{ "srdi.", 3, PPC64, "rldicl. %0,%1,64-(%2),%2" }, +{ "clrrdi", 3, PPC64, "rldicr %0,%1,0,63-(%2)" }, +{ "clrrdi.", 3, PPC64, "rldicr. %0,%1,0,63-(%2)" }, +{ "clrlsldi",4, PPC64, "rldic %0,%1,%3,(%2)-(%3)" }, +{ "clrlsldi.",4, PPC64, "rldic. %0,%1,%3,(%2)-(%3)" }, + +{ "extlwi", 4, PPCCOM, "rlwinm %0,%1,%3,0,(%2)-1" }, +{ "extlwi.", 4, PPCCOM, "rlwinm. %0,%1,%3,0,(%2)-1" }, +{ "extrwi", 4, PPCCOM, "rlwinm %0,%1,(%2)+(%3),32-(%2),31" }, +{ "extrwi.", 4, PPCCOM, "rlwinm. %0,%1,(%2)+(%3),32-(%2),31" }, +{ "inslwi", 4, PPCCOM, "rlwimi %0,%1,32-(%3),%3,(%2)+(%3)-1" }, +{ "inslwi.", 4, PPCCOM, "rlwimi. %0,%1,32-(%3),%3,(%2)+(%3)-1" }, +{ "insrwi", 4, PPCCOM, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" }, +{ "insrwi.", 4, PPCCOM, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"}, +{ "rotrwi", 3, PPCCOM, "rlwinm %0,%1,32-(%2),0,31" }, +{ "rotrwi.", 3, PPCCOM, "rlwinm. %0,%1,32-(%2),0,31" }, +{ "slwi", 3, PPCCOM, "rlwinm %0,%1,%2,0,31-(%2)" }, +{ "sli", 3, PWRCOM, "rlinm %0,%1,%2,0,31-(%2)" }, +{ "slwi.", 3, PPCCOM, "rlwinm. %0,%1,%2,0,31-(%2)" }, +{ "sli.", 3, PWRCOM, "rlinm. %0,%1,%2,0,31-(%2)" }, +{ "srwi", 3, PPCCOM, "rlwinm %0,%1,32-(%2),%2,31" }, +{ "sri", 3, PWRCOM, "rlinm %0,%1,32-(%2),%2,31" }, +{ "srwi.", 3, PPCCOM, "rlwinm. %0,%1,32-(%2),%2,31" }, +{ "sri.", 3, PWRCOM, "rlinm. %0,%1,32-(%2),%2,31" }, +{ "clrrwi", 3, PPCCOM, "rlwinm %0,%1,0,0,31-(%2)" }, +{ "clrrwi.", 3, PPCCOM, "rlwinm. %0,%1,0,0,31-(%2)" }, +{ "clrlslwi",4, PPCCOM, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" }, +{ "clrlslwi.",4, PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" }, + +}; + +const int powerpc_num_macros = + sizeof (powerpc_macros) / sizeof (powerpc_macros[0]); + +#endif /* PPC_H */ diff --git a/gnu/usr.bin/gas/opcode/pyr.h b/gnu/usr.bin/gas/opcode/pyr.h index 06632b8d919..0900add7efe 100644 --- a/gnu/usr.bin/gas/opcode/pyr.h +++ b/gnu/usr.bin/gas/opcode/pyr.h @@ -1,3 +1,5 @@ +/* $OpenBSD: pyr.h,v 1.2 1998/02/15 18:50:08 niklas Exp $ */ + /* pyramid.opcode.h -- gdb initial attempt. */ /* pyramid opcode table: wot to do with this diff --git a/gnu/usr.bin/gas/opcode/sparc.h b/gnu/usr.bin/gas/opcode/sparc.h index 38ae9a4f7ae..2f8c24c3207 100644 --- a/gnu/usr.bin/gas/opcode/sparc.h +++ b/gnu/usr.bin/gas/opcode/sparc.h @@ -1,3 +1,4 @@ +/* $OpenBSD: sparc.h,v 1.2 1998/02/15 18:50:09 niklas Exp $ */ /* Table of opcodes for the sparc. Copyright 1989, 1991, 1992 Free Software Foundation, Inc. @@ -19,10 +20,6 @@ You should have received a copy of the GNU General Public License along with GAS or GDB; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: sparc.h,v 1.1 1995/10/18 08:39:10 deraadt Exp $ - */ - /* FIXME-someday: perhaps the ,a's and such should be embedded in the instruction's name rather than the args. This would make gas faster, pinsn slower, but would mess up some macros a bit. xoxorich. */ @@ -777,6 +774,7 @@ condfc("fbule", "cb013", 0xe, 0), { "unimp", F2(0x0, 0x0), 0xffc00000, "n", 0, v6 }, { "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", 0, v6 }, +{ "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|SIMM13(~0), "1", 0, v6 }, { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", 0, v6 }, { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", 0, v6 }, { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", 0, v6 }, diff --git a/gnu/usr.bin/gas/opcode/tahoe.h b/gnu/usr.bin/gas/opcode/tahoe.h index 27099a4db08..c9c4e569f6d 100644 --- a/gnu/usr.bin/gas/opcode/tahoe.h +++ b/gnu/usr.bin/gas/opcode/tahoe.h @@ -1,3 +1,5 @@ +/* $OpenBSD: tahoe.h,v 1.2 1998/02/15 18:50:09 niklas Exp $ */ + /* tahoe-opcode.h - tahoe-specific * Not part of GAS yet * diff --git a/gnu/usr.bin/gas/opcode/vax.h b/gnu/usr.bin/gas/opcode/vax.h index d604e3f9c65..e5c5cd43bdd 100644 --- a/gnu/usr.bin/gas/opcode/vax.h +++ b/gnu/usr.bin/gas/opcode/vax.h @@ -1,3 +1,5 @@ +/* $OpenBSD: vax.h,v 1.2 1998/02/15 18:50:10 niklas Exp $ */ + /* Vax opcde list. Copyright (C) 1989, Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/output-file.c b/gnu/usr.bin/gas/output-file.c index d71527ac1dd..9b5e311caa3 100644 --- a/gnu/usr.bin/gas/output-file.c +++ b/gnu/usr.bin/gas/output-file.c @@ -1,3 +1,5 @@ +/* $OpenBSD: output-file.c,v 1.2 1998/02/15 18:48:57 niklas Exp $ */ + /* output-file.c - Deal with the output file Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -27,7 +29,7 @@ /* note that we do need config info. xoxorich. */ #ifndef lint -static char rcsid[] = "$Id: output-file.c,v 1.1 1995/10/18 08:38:59 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: output-file.c,v 1.2 1998/02/15 18:48:57 niklas Exp $"; #endif #include <stdio.h> diff --git a/gnu/usr.bin/gas/output-file.h b/gnu/usr.bin/gas/output-file.h index a565f5cdb2e..7836a34dfde 100644 --- a/gnu/usr.bin/gas/output-file.h +++ b/gnu/usr.bin/gas/output-file.h @@ -1,3 +1,5 @@ +/* $OpenBSD: output-file.h,v 1.2 1998/02/15 18:48:58 niklas Exp $ */ + /* This file is output-file.h Copyright (C) 1987-1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: output-file.h,v 1.1 1995/10/18 08:38:59 deraadt Exp $ - */ - #ifdef __STDC__ diff --git a/gnu/usr.bin/gas/read.c b/gnu/usr.bin/gas/read.c index e7407fc3797..82d2f8a9e9b 100644 --- a/gnu/usr.bin/gas/read.c +++ b/gnu/usr.bin/gas/read.c @@ -1,4 +1,4 @@ -/* $OpenBSD: read.c,v 1.4 1997/11/05 09:42:15 deraadt Exp $ */ +/* $OpenBSD: read.c,v 1.5 1998/02/15 18:48:58 niklas Exp $ */ /* read.c - read a source file - @@ -21,7 +21,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$OpenBSD: read.c,v 1.4 1997/11/05 09:42:15 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: read.c,v 1.5 1998/02/15 18:48:58 niklas Exp $"; #endif #define MASK_CHAR (0xFF) /* If your chars aren't 8 bits, you will @@ -939,8 +939,20 @@ int needs_align; /* 1 if this was a ".bss" directive, which may require as_warn("Alignment negative. 0 assumed."); } record_alignment(SEG_BSS, align); - } /* if needs align */ - + } else { /* if needs align */ + /* FIXME. This needs to be machine independent. */ + if (temp >= 8) + align = 3; + else if (temp >= 4) + align = 2; + else if (temp >= 2) + align = 1; + else + align = 0; + needs_align = 1; + } /* if !needs align */ + record_alignment(SEG_BSS, align); + *p = 0; symbolP = symbol_find_or_make(name); *p = c; diff --git a/gnu/usr.bin/gas/read.h b/gnu/usr.bin/gas/read.h index f08e026c7c5..e30d4b67f83 100644 --- a/gnu/usr.bin/gas/read.h +++ b/gnu/usr.bin/gas/read.h @@ -1,3 +1,5 @@ +/* $OpenBSD: read.h,v 1.2 1998/02/15 18:48:59 niklas Exp $ */ + /* read.h - of read.c Copyright (C) 1986, 1990, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: read.h,v 1.1 1995/10/18 08:38:59 deraadt Exp $ - */ - extern char *input_line_pointer; /* -> char we are parsing now. */ diff --git a/gnu/usr.bin/gas/struc-symbol.h b/gnu/usr.bin/gas/struc-symbol.h index 06d46ef636c..3fef4c8ad50 100644 --- a/gnu/usr.bin/gas/struc-symbol.h +++ b/gnu/usr.bin/gas/struc-symbol.h @@ -1,3 +1,5 @@ +/* $OpenBSD: struc-symbol.h,v 1.2 1998/02/15 18:48:59 niklas Exp $ */ + /* struct_symbol.h - Internal symbol structure Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -16,10 +18,6 @@ oYou should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: struc-symbol.h,v 1.1 1995/10/18 08:39:00 deraadt Exp $ - */ - #ifndef __struc_symbol_h__ #define __struc_symbol_h__ diff --git a/gnu/usr.bin/gas/subsegs.c b/gnu/usr.bin/gas/subsegs.c index 4a42ec11ada..3bf93e1fea3 100644 --- a/gnu/usr.bin/gas/subsegs.c +++ b/gnu/usr.bin/gas/subsegs.c @@ -1,3 +1,5 @@ +/* $OpenBSD: subsegs.c,v 1.2 1998/02/15 18:49:00 niklas Exp $ */ + /* subsegs.c - subsegments - Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -22,7 +24,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: subsegs.c,v 1.1 1995/10/18 08:39:00 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: subsegs.c,v 1.2 1998/02/15 18:49:00 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/subsegs.h b/gnu/usr.bin/gas/subsegs.h index 72d5b73be37..af830c140ca 100644 --- a/gnu/usr.bin/gas/subsegs.h +++ b/gnu/usr.bin/gas/subsegs.h @@ -1,3 +1,5 @@ +/* $OpenBSD: subsegs.h,v 1.2 1998/02/15 18:49:01 niklas Exp $ */ + /* subsegs.h -> subsegs.c Copyright (C) 1987, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: subsegs.h,v 1.1 1995/10/18 08:39:00 deraadt Exp $ - */ - /* * For every sub-segment the user mentions in the ASsembler program, diff --git a/gnu/usr.bin/gas/symbols.c b/gnu/usr.bin/gas/symbols.c index ac3d6aaf641..63fa4e0e944 100644 --- a/gnu/usr.bin/gas/symbols.c +++ b/gnu/usr.bin/gas/symbols.c @@ -1,3 +1,5 @@ +/* $OpenBSD: symbols.c,v 1.2 1998/02/15 18:49:01 niklas Exp $ */ + /* symbols.c -symbol table- Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -19,7 +21,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef lint -static char rcsid[] = "$Id: symbols.c,v 1.1 1995/10/18 08:39:00 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: symbols.c,v 1.2 1998/02/15 18:49:01 niklas Exp $"; #endif #include "as.h" diff --git a/gnu/usr.bin/gas/symbols.h b/gnu/usr.bin/gas/symbols.h index df44074fc2c..8f4d317f070 100644 --- a/gnu/usr.bin/gas/symbols.h +++ b/gnu/usr.bin/gas/symbols.h @@ -1,3 +1,5 @@ +/* $OpenBSD: symbols.h,v 1.2 1998/02/15 18:49:02 niklas Exp $ */ + /* symbols.h - Copyright (C) 1987, 1990, 1992 Free Software Foundation, Inc. @@ -17,10 +19,6 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* - * $Id: symbols.h,v 1.1 1995/10/18 08:39:00 deraadt Exp $ - */ - extern struct obstack notes; /* eg FixS live here. */ diff --git a/gnu/usr.bin/gas/testscripts/doboth b/gnu/usr.bin/gas/testscripts/doboth index 115a3cd36e0..5eefa8f92ad 100644 --- a/gnu/usr.bin/gas/testscripts/doboth +++ b/gnu/usr.bin/gas/testscripts/doboth @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: doboth,v 1.1 1995/10/18 08:39:10 deraadt Exp $ +# $OpenBSD: doboth,v 1.2 1998/02/15 18:50:11 niklas Exp $ x=$1 ; shift y=$1 ; shift diff --git a/gnu/usr.bin/gas/testscripts/doobjcmp b/gnu/usr.bin/gas/testscripts/doobjcmp index 514009f5ab9..8dbbdd7e9d0 100644 --- a/gnu/usr.bin/gas/testscripts/doobjcmp +++ b/gnu/usr.bin/gas/testscripts/doobjcmp @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: doobjcmp,v 1.1 1995/10/18 08:39:10 deraadt Exp $ +# $OpenBSD: doobjcmp,v 1.2 1998/02/15 18:50:12 niklas Exp $ # compare two object files, in depth. x=$1 diff --git a/gnu/usr.bin/gas/testscripts/dostriptest b/gnu/usr.bin/gas/testscripts/dostriptest index 86a07ccb67d..ea978b0322a 100644 --- a/gnu/usr.bin/gas/testscripts/dostriptest +++ b/gnu/usr.bin/gas/testscripts/dostriptest @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: dostriptest,v 1.1 1995/10/18 08:39:10 deraadt Exp $ +# $OpenBSD: dostriptest,v 1.2 1998/02/15 18:50:12 niklas Exp $ x=striptest.xx.$$ y=striptest.yy.$$ diff --git a/gnu/usr.bin/gas/testscripts/dotest b/gnu/usr.bin/gas/testscripts/dotest index 14fa7c6f5f6..ff5d1cc9371 100644 --- a/gnu/usr.bin/gas/testscripts/dotest +++ b/gnu/usr.bin/gas/testscripts/dotest @@ -1,6 +1,6 @@ #!/bin/sh +# $OpenBSD: dotest,v 1.2 1998/02/15 18:50:13 niklas Exp $ # ad hoc debug tool -# $Id: dotest,v 1.1 1995/10/18 08:39:10 deraadt Exp $ x=$1 y=$2 diff --git a/gnu/usr.bin/gas/testscripts/dounsortreloc b/gnu/usr.bin/gas/testscripts/dounsortreloc index 0dd14c40fe5..0c69b31db96 100644 --- a/gnu/usr.bin/gas/testscripts/dounsortreloc +++ b/gnu/usr.bin/gas/testscripts/dounsortreloc @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: dounsortreloc,v 1.1 1995/10/18 08:39:10 deraadt Exp $ +# $OpenBSD: dounsortreloc,v 1.2 1998/02/15 18:50:13 niklas Exp $ # objdump the reloc table, but strip off the headings and reloc # numbers and sort the result. Intended for use in comparing reloc # tables that may not be in the same order. diff --git a/gnu/usr.bin/gas/testscripts/dounsortsymbols b/gnu/usr.bin/gas/testscripts/dounsortsymbols index c1b1cc03036..73cc8316286 100644 --- a/gnu/usr.bin/gas/testscripts/dounsortsymbols +++ b/gnu/usr.bin/gas/testscripts/dounsortsymbols @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: dounsortsymbols,v 1.1 1995/10/18 08:39:10 deraadt Exp $ +# $OpenBSD: dounsortsymbols,v 1.2 1998/02/15 18:50:14 niklas Exp $ # objdump the symbol table, but strip off the headings and symbol # numbers and sort the result. Intended for use in comparing symbol # tables that may not be in the same order. diff --git a/gnu/usr.bin/gas/write.h b/gnu/usr.bin/gas/write.h index 01e72724180..219d6d3277a 100644 --- a/gnu/usr.bin/gas/write.h +++ b/gnu/usr.bin/gas/write.h @@ -1,3 +1,5 @@ +/* $OpenBSD: write.h,v 1.2 1998/02/15 18:49:02 niklas Exp $ */ + /* write.h Copyright (C) 1987, 1992 Free Software Foundation, Inc. diff --git a/gnu/usr.bin/gas/xmalloc.c b/gnu/usr.bin/gas/xmalloc.c index 7c7d3d73ba4..f51ffda79b6 100644 --- a/gnu/usr.bin/gas/xmalloc.c +++ b/gnu/usr.bin/gas/xmalloc.c @@ -1,3 +1,5 @@ +/* $OpenBSD: xmalloc.c,v 1.2 1998/02/15 18:49:03 niklas Exp $ */ + /* xmalloc.c - get memory or bust Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -42,7 +44,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: xmalloc.c,v 1.1 1995/10/18 08:39:00 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: xmalloc.c,v 1.2 1998/02/15 18:49:03 niklas Exp $"; #endif #include <stdio.h> diff --git a/gnu/usr.bin/gas/xrealloc.c b/gnu/usr.bin/gas/xrealloc.c index 7dd23676711..6608297fa62 100644 --- a/gnu/usr.bin/gas/xrealloc.c +++ b/gnu/usr.bin/gas/xrealloc.c @@ -1,3 +1,5 @@ +/* $OpenBSD: xrealloc.c,v 1.2 1998/02/15 18:49:03 niklas Exp $ */ + /* xrealloc.c - new memory or bust Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. @@ -43,7 +45,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: xrealloc.c,v 1.1 1995/10/18 08:39:00 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: xrealloc.c,v 1.2 1998/02/15 18:49:03 niklas Exp $"; #endif |