7b4ae82428
bfd * Makefile.am: Add s12z files. * Makefile.in: Regenerate. * archures.c: Add bfd_s12z_arch. * bfd-in.h: Add exports of bfd_putb24 and bfd_putl24. * bfd-in2.h: Regenerate. * config.bfd: Add s12z target. * configure.ac: Add s12z target. * configure: Regenerate. * cpu-s12z.c: New file. * elf32-s12z.c: New file. * libbfd.c (bfd_putb24): New function. (bfd_putl24): New function. * libbfd.h: Regenerate. * reloc.c: Add s12z relocations. (bfd_get_reloc_size): Handle size 5 relocs. * targets.c: Add s12z_elf32_vec. opcodes * Makefile.am: Add support for s12z architecture. * configure.ac: Likewise. * disassemble.c: Likewise. * disassemble.h: Likewise. * Makefile.in: Regenerate. * configure: Regenerate. * s12z-dis.c: New file. * s12z.h: New file. include * elf/s12z.h: New header. ld * Makefile.am: Add support for s12z architecture. * configure.tgt: Likewise. * Makefile.in: Regenerate. * emulparams/m9s12zelf.sh: New file. * scripttempl/elfm9s12z.sc: New file. * testsuite/ld-discard/static.d: Expect to fail for the s12z target. * testsuite/ld-elf/endsym.d: Likewise. * testsuite/ld-elf/merge.d: Likewise. * testsuite/ld-elf/pr14926.d: Skip for the s12z target. * testsuite/ld-elf/sec64k.exp: Likewise. * testsuite/ld-s12z: New directory. * testsuite/ld-s12z/opr-linking.d: New file. * testsuite/ld-s12z/opr-linking.s: New file. * testsuite/ld-s12z/relative-linking.d: New file. * testsuite/ld-s12z/relative-linking.s: New file. * testsuite/ld-s12z/z12s.exp: New file. gas * Makefile.am: Add support for s12z target. * Makefile.in: Regenerate. * NEWS: Mention the new support. * config/tc-s12z.c: New file. * config/tc-s12z.h: New file. * configure.tgt: Add s12z support. * doc/Makefile.am: Likewise. * doc/Makefile.in: Regenerate. * doc/all.texi: Add s12z documentation. * doc/as.textinfo: Likewise. * doc/c-s12z.texi: New file. * testsuite/gas/s12z: New directory. * testsuite/gas/s12z/abs.d: New file. * testsuite/gas/s12z/abs.s: New file. * testsuite/gas/s12z/adc-imm.d: New file. * testsuite/gas/s12z/adc-imm.s: New file. * testsuite/gas/s12z/adc-opr.d: New file. * testsuite/gas/s12z/adc-opr.s: New file. * testsuite/gas/s12z/add-imm.d: New file. * testsuite/gas/s12z/add-imm.s: New file. * testsuite/gas/s12z/add-opr.d: New file. * testsuite/gas/s12z/add-opr.s: New file. * testsuite/gas/s12z/and-imm.d: New file. * testsuite/gas/s12z/and-imm.s: New file. * testsuite/gas/s12z/and-opr.d: New file. * testsuite/gas/s12z/and-opr.s: New file. * testsuite/gas/s12z/and-or-cc.d: New file. * testsuite/gas/s12z/and-or-cc.s: New file. * testsuite/gas/s12z/bfext-special.d: New file. * testsuite/gas/s12z/bfext-special.s: New file. * testsuite/gas/s12z/bfext.d: New file. * testsuite/gas/s12z/bfext.s: New file. * testsuite/gas/s12z/bit-manip.d: New file. * testsuite/gas/s12z/bit-manip.s: New file. * testsuite/gas/s12z/bit.d: New file. * testsuite/gas/s12z/bit.s: New file. * testsuite/gas/s12z/bra-expression-defined.d: New file. * testsuite/gas/s12z/bra-expression-defined.s: New file. * testsuite/gas/s12z/bra-expression-undef.d: New file. * testsuite/gas/s12z/bra-expression-undef.s: New file. * testsuite/gas/s12z/bra.d: New file. * testsuite/gas/s12z/bra.s: New file. * testsuite/gas/s12z/brclr-symbols.d: New file. * testsuite/gas/s12z/brclr-symbols.s: New file. * testsuite/gas/s12z/brset-clr-opr-imm-rel.d: New file. * testsuite/gas/s12z/brset-clr-opr-imm-rel.s: New file. * testsuite/gas/s12z/brset-clr-opr-reg-rel.d: New file. * testsuite/gas/s12z/brset-clr-opr-reg-rel.s: New file. * testsuite/gas/s12z/brset-clr-reg-imm-rel.d: New file. * testsuite/gas/s12z/brset-clr-reg-imm-rel.s: New file. * testsuite/gas/s12z/brset-clr-reg-reg-rel.d: New file. * testsuite/gas/s12z/brset-clr-reg-reg-rel.s: New file. * testsuite/gas/s12z/clb.d: New file. * testsuite/gas/s12z/clb.s: New file. * testsuite/gas/s12z/clr-opr.d: New file. * testsuite/gas/s12z/clr-opr.s: New file. * testsuite/gas/s12z/clr.d: New file. * testsuite/gas/s12z/clr.s: New file. * testsuite/gas/s12z/cmp-imm.d: New file. * testsuite/gas/s12z/cmp-imm.s: New file. * testsuite/gas/s12z/cmp-opr-inc.d: New file. * testsuite/gas/s12z/cmp-opr-inc.s: New file. * testsuite/gas/s12z/cmp-opr-rdirect.d: New file. * testsuite/gas/s12z/cmp-opr-rdirect.s: New file. * testsuite/gas/s12z/cmp-opr-reg.d: New file. * testsuite/gas/s12z/cmp-opr-reg.s: New file. * testsuite/gas/s12z/cmp-opr-rindirect.d: New file. * testsuite/gas/s12z/cmp-opr-rindirect.s: New file. * testsuite/gas/s12z/cmp-opr-sxe4.d: New file. * testsuite/gas/s12z/cmp-opr-sxe4.s: New file. * testsuite/gas/s12z/cmp-opr-xys.d: New file. * testsuite/gas/s12z/cmp-opr-xys.s: New file. * testsuite/gas/s12z/cmp-s-imm.d: New file. * testsuite/gas/s12z/cmp-s-imm.s: New file. * testsuite/gas/s12z/cmp-s-opr.d: New file. * testsuite/gas/s12z/cmp-s-opr.s: New file. * testsuite/gas/s12z/cmp-xy.d: New file. * testsuite/gas/s12z/cmp-xy.s: New file. * testsuite/gas/s12z/com-opr.d: New file. * testsuite/gas/s12z/com-opr.s: New file. * testsuite/gas/s12z/complex-shifts.d: New file. * testsuite/gas/s12z/complex-shifts.s: New file. * testsuite/gas/s12z/db-tb-cc-opr.d: New file. * testsuite/gas/s12z/db-tb-cc-opr.s: New file. * testsuite/gas/s12z/db-tb-cc-reg.d: New file. * testsuite/gas/s12z/db-tb-cc-reg.s: New file. * testsuite/gas/s12z/dbCC.d: New file. * testsuite/gas/s12z/dbCC.s: New file. * testsuite/gas/s12z/dec-opr.d: New file. * testsuite/gas/s12z/dec-opr.s: New file. * testsuite/gas/s12z/dec.d: New file. * testsuite/gas/s12z/dec.s: New file. * testsuite/gas/s12z/div.d: New file. * testsuite/gas/s12z/div.s: New file. * testsuite/gas/s12z/eor.d: New file. * testsuite/gas/s12z/eor.s: New file. * testsuite/gas/s12z/exg.d: New file. * testsuite/gas/s12z/exg.s: New file. * testsuite/gas/s12z/ext24-ld-xy.d: New file. * testsuite/gas/s12z/ext24-ld-xy.s: New file. * testsuite/gas/s12z/inc-opr.d: New file. * testsuite/gas/s12z/inc-opr.s: New file. * testsuite/gas/s12z/inc.d: New file. * testsuite/gas/s12z/inc.s: New file. * testsuite/gas/s12z/inh.d: New file. * testsuite/gas/s12z/inh.s: New file. * testsuite/gas/s12z/jmp.d: New file. * testsuite/gas/s12z/jmp.s: New file. * testsuite/gas/s12z/jsr.d: New file. * testsuite/gas/s12z/jsr.s: New file. * testsuite/gas/s12z/ld-imm-page2.d: New file. * testsuite/gas/s12z/ld-imm-page2.s: New file. * testsuite/gas/s12z/ld-imm.d: New file. * testsuite/gas/s12z/ld-imm.s: New file. * testsuite/gas/s12z/ld-immu18.d: New file. * testsuite/gas/s12z/ld-immu18.s: New file. * testsuite/gas/s12z/ld-large-direct.d: New file. * testsuite/gas/s12z/ld-large-direct.s: New file. * testsuite/gas/s12z/ld-opr.d: New file. * testsuite/gas/s12z/ld-opr.s: New file. * testsuite/gas/s12z/ld-s-opr.d: New file. * testsuite/gas/s12z/ld-s-opr.s: New file. * testsuite/gas/s12z/ld-small-direct.d: New file. * testsuite/gas/s12z/ld-small-direct.s: New file. * testsuite/gas/s12z/lea-immu18.d: New file. * testsuite/gas/s12z/lea-immu18.s: New file. * testsuite/gas/s12z/lea.d: New file. * testsuite/gas/s12z/lea.s: New file. * testsuite/gas/s12z/mac.d: New file. * testsuite/gas/s12z/mac.s: New file. * testsuite/gas/s12z/min-max.d: New file. * testsuite/gas/s12z/min-max.s: New file. * testsuite/gas/s12z/mod.d: New file. * testsuite/gas/s12z/mod.s: New file. * testsuite/gas/s12z/mov.d: New file. * testsuite/gas/s12z/mov.s: New file. * testsuite/gas/s12z/mul-imm.d: New file. * testsuite/gas/s12z/mul-imm.s: New file. * testsuite/gas/s12z/mul-opr-opr.d: New file. * testsuite/gas/s12z/mul-opr-opr.s: New file. * testsuite/gas/s12z/mul-opr.d: New file. * testsuite/gas/s12z/mul-opr.s: New file. * testsuite/gas/s12z/mul-reg.d: New file. * testsuite/gas/s12z/mul-reg.s: New file. * testsuite/gas/s12z/mul.d: New file. * testsuite/gas/s12z/mul.s: New file. * testsuite/gas/s12z/neg-opr.d: New file. * testsuite/gas/s12z/neg-opr.s: New file. * testsuite/gas/s12z/not-so-simple-shifts.d: New file. * testsuite/gas/s12z/not-so-simple-shifts.s: New file. * testsuite/gas/s12z/opr-18u.d: New file. * testsuite/gas/s12z/opr-18u.s: New file. * testsuite/gas/s12z/opr-expr.d: New file. * testsuite/gas/s12z/opr-expr.s: New file. * testsuite/gas/s12z/opr-ext-18.d: New file. * testsuite/gas/s12z/opr-ext-18.s: New file. * testsuite/gas/s12z/opr-idx-24-reg.d: New file. * testsuite/gas/s12z/opr-idx-24-reg.s: New file. * testsuite/gas/s12z/opr-idx3-reg.d: New file. * testsuite/gas/s12z/opr-idx3-reg.s: New file. * testsuite/gas/s12z/opr-idx3-xysp-24.d: New file. * testsuite/gas/s12z/opr-idx3-xysp-24.s: New file. * testsuite/gas/s12z/opr-indirect-expr.d: New file. * testsuite/gas/s12z/opr-indirect-expr.s: New file. * testsuite/gas/s12z/opr-symbol.d: New file. * testsuite/gas/s12z/opr-symbol.s: New file. * testsuite/gas/s12z/or-imm.d: New file. * testsuite/gas/s12z/or-imm.s: New file. * testsuite/gas/s12z/or-opr.d: New file. * testsuite/gas/s12z/or-opr.s: New file. * testsuite/gas/s12z/p2-mul.d: New file. * testsuite/gas/s12z/p2-mul.s: New file. * testsuite/gas/s12z/page2-inh.d: New file. * testsuite/gas/s12z/page2-inh.s: New file. * testsuite/gas/s12z/psh-pul.d: New file. * testsuite/gas/s12z/psh-pul.s: New file. * testsuite/gas/s12z/qmul.d: New file. * testsuite/gas/s12z/qmul.s: New file. * testsuite/gas/s12z/rotate.d: New file. * testsuite/gas/s12z/rotate.s: New file. * testsuite/gas/s12z/s12z.exp: New file. * testsuite/gas/s12z/sat.d: New file. * testsuite/gas/s12z/sat.s: New file. * testsuite/gas/s12z/sbc-imm.d: New file. * testsuite/gas/s12z/sbc-imm.s: New file. * testsuite/gas/s12z/sbc-opr.d: New file. * testsuite/gas/s12z/sbc-opr.s: New file. * testsuite/gas/s12z/shift.d: New file. * testsuite/gas/s12z/shift.s: New file. * testsuite/gas/s12z/simple-shift.d: New file. * testsuite/gas/s12z/simple-shift.s: New file. * testsuite/gas/s12z/single-ops.d: New file. * testsuite/gas/s12z/single-ops.s: New file. * testsuite/gas/s12z/specd6.d: New file. * testsuite/gas/s12z/specd6.s: New file. * testsuite/gas/s12z/st-large-direct.d: New file. * testsuite/gas/s12z/st-large-direct.s: New file. * testsuite/gas/s12z/st-opr.d: New file. * testsuite/gas/s12z/st-opr.s: New file. * testsuite/gas/s12z/st-s-opr.d: New file. * testsuite/gas/s12z/st-s-opr.s: New file. * testsuite/gas/s12z/st-small-direct.d: New file. * testsuite/gas/s12z/st-small-direct.s: New file. * testsuite/gas/s12z/st-xy.d: New file. * testsuite/gas/s12z/st-xy.s: New file. * testsuite/gas/s12z/sub-imm.d: New file. * testsuite/gas/s12z/sub-imm.s: New file. * testsuite/gas/s12z/sub-opr.d: New file. * testsuite/gas/s12z/sub-opr.s: New file. * testsuite/gas/s12z/tfr.d: New file. * testsuite/gas/s12z/tfr.s: New file. * testsuite/gas/s12z/trap.d: New file. * testsuite/gas/s12z/trap.s: New file. binutils* readelf.c: Add support for s12z architecture. * testsuite/lib/binutils-common.exp (is_elf_format): Excluse s12z targets.
213 lines
6.3 KiB
Plaintext
213 lines
6.3 KiB
Plaintext
@c Copyright (C) 2018 Free Software Foundation, Inc.
|
|
@c This is part of the GAS manual.
|
|
@c For copying conditions, see the file as.texinfo.
|
|
@ifset GENERIC
|
|
@page
|
|
@node S12Z-Dependent
|
|
@chapter S12Z Dependent Features
|
|
@end ifset
|
|
@ifclear GENERIC
|
|
@node Machine Dependencies
|
|
@chapter S12Z Dependent Features
|
|
@end ifclear
|
|
|
|
The Freescale S12Z version of @code{@value{AS}} has a few machine
|
|
dependent features.
|
|
|
|
@cindex S12Z support
|
|
@menu
|
|
* S12Z-Opts:: S12Z Options
|
|
* S12Z-Syntax:: Syntax
|
|
* S12Z-Directives:: Assembler Directives
|
|
* S12Z-opcodes:: Opcodes
|
|
@end menu
|
|
|
|
@node S12Z-Opts
|
|
@section S12Z Options
|
|
|
|
@cindex options, S12Z
|
|
@cindex S12Z options
|
|
|
|
@node S12Z-Syntax
|
|
@section Syntax
|
|
|
|
@cindex S12Z syntax
|
|
@cindex syntax, S12Z
|
|
|
|
In the S12Z syntax, the instruction name comes first and it may
|
|
be followed by one or by several operands.
|
|
In most cases the maximum number of operands is three.
|
|
Some instructions accept and (in certain situations require) a suffix
|
|
indicating the size of the operand.
|
|
The suffix is separated from the instruction name by a period (@samp{.})
|
|
and may be one of @samp{b}, @samp{w}, @samp{p} or @samp{l} indicating
|
|
`byte' (a single byte), `word' (2 bytes), `pointer' (3 bytes) or `long' (4 bytes)
|
|
respectively.
|
|
Operands are separated by a comma (@samp{,}).
|
|
A comma however does not act as a separator if it appears within parentheses
|
|
(@samp{()}) or within square brackets (@samp{[]}).
|
|
@code{@value{AS}} will complain if too many, too few or inappropriate operands
|
|
are specified for a given instruction.
|
|
The MRI mode is not supported for this architecture.
|
|
Example:
|
|
|
|
@smallexample
|
|
bset.b 0xA98, #5
|
|
mov.b #6, 0x2409
|
|
ld d0, #4
|
|
mov.l (d0, x), 0x2409
|
|
inc d0
|
|
cmp d0, #12
|
|
blt *-4
|
|
lea x, 0x2409
|
|
st y, (1, x)
|
|
@end smallexample
|
|
|
|
@cindex line comment character, S12Z
|
|
@cindex S12Z line comment character
|
|
The presence of a @samp{;} character anywhere
|
|
on a line indicates the start of a comment that extends to the end of
|
|
that line.
|
|
|
|
A @samp{*} or a @samp{#} character at the start of a line also
|
|
introduces a line comment, but these characters do not work elsewhere
|
|
on the line. If the first character of the line is a @samp{#} then as
|
|
well as starting a comment, the line could also be logical line number
|
|
directive (@pxref{Comments}) or a preprocessor control command
|
|
(@pxref{Preprocessing}).
|
|
|
|
@cindex line separator, S12Z
|
|
@cindex statement separator, S12Z
|
|
@cindex S12Z line separator
|
|
The S12Z assembler does not currently support a line separator
|
|
character.
|
|
|
|
@cindex S12Z addressing modes
|
|
@cindex addressing modes, S12Z
|
|
The following addressing modes are understood for the S12Z.
|
|
@table @dfn
|
|
@item Immediate
|
|
@samp{#@var{number}}
|
|
|
|
@item Immediate Bit Field
|
|
@samp{#@var{width}:@var{offset}}
|
|
|
|
Bit field instructions in the immediate mode require the width and offset to
|
|
be specified.
|
|
The @var{width} pararmeter specifies the number of bits in the field.
|
|
It should be a number in the range [1,32].
|
|
@var{Offset} determines the position within the field where the operation
|
|
should start.
|
|
It should be a number in the range [0,31].
|
|
|
|
@item Relative
|
|
@samp{*@var{symbol}}, or @samp{*[+-]@var{digits}}
|
|
|
|
Program counter relative addresses have a width of 15 bits.
|
|
Thus, they must be within the range [-32768, 32767].
|
|
|
|
@item Register
|
|
@samp{@var{reg}}
|
|
|
|
Some instructions accept a register as an operand.
|
|
In general, @var{reg} may be a data register (@samp{D0}, @samp{D1} @dots{}
|
|
@samp{D7}), the @var{X} register or the @var{Y} register.
|
|
|
|
A few instructions accept as an argument the stack pointer
|
|
register (@samp{S}), and/or the program counter (@samp{P}).
|
|
|
|
Some very special instructions accept arguments which refer to the
|
|
condition code register. For these arguments the syntax is
|
|
@samp{CCR}, @samp{CCH} or @samp{CCL} which refer to the complete condition code register, the condition code register high byte and the condition code register low byte respectively.
|
|
|
|
@item Absolute Direct
|
|
@samp{@var{symbol}}, or @samp{@var{digits}}
|
|
|
|
@item Absolute Indirect
|
|
@samp{[@var{symbol}}, or @samp{@var{digits}]}
|
|
|
|
|
|
@item Constant Offset Indexed
|
|
@samp{(@var{number},@var{reg})}
|
|
|
|
@var{Reg} may be either @samp{X}, @samp{Y}, @samp{S} or
|
|
@samp{P} or one of the data registers @samp{D0}, @samp{D1} @dots{}
|
|
@samp{D7}.
|
|
If any of the registers @samp{D2} @dots{} @samp{D5} are specified, then the
|
|
register value is treated as a signed value.
|
|
Otherwise it is treated as unsigned.
|
|
@var{Number} may be any integer in the range [-8388608,8388607].
|
|
|
|
@item Offset Indexed Indirect
|
|
@samp{[@var{number},@var{reg}]}
|
|
|
|
@var{Reg} may be either @samp{X}, @samp{Y}, @samp{S} or
|
|
@samp{P}.
|
|
@var{Number} may be any integer in the range [-8388608,8388607].
|
|
|
|
@item Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement
|
|
@samp{-@var{reg}},
|
|
@samp{+@var{reg}},
|
|
@samp{@var{reg}-} or
|
|
@samp{@var{reg}+}
|
|
|
|
This addressing mode is typically used to access a value at an address,
|
|
and simultaneously to increment/decrement the register pointing to that
|
|
address.
|
|
Thus @var{reg} may be any of the 24 bit registers @samp{X}, @samp{Y}, or
|
|
@samp{S}.
|
|
Pre-increment and post-decrement are not available for
|
|
register @samp{S} (only post-increment and pre-decrement are available).
|
|
|
|
@item Register Offset Direct
|
|
@samp{(@var{data-reg},@var{reg})}
|
|
|
|
@var{Reg} can be either @samp{X}, @samp{Y}, or @samp{S}.
|
|
@var{Data-reg}
|
|
must be one of the data registers @samp{D0}, @samp{D1} @dots{} @samp{D7}.
|
|
If any of the registers @samp{D2} @dots{} @samp{D5} are specified, then
|
|
the register value is treated as a signed value.
|
|
Otherwise it is treated as unsigned.
|
|
|
|
@item Register Offset Indirect
|
|
@samp{[@var{data-reg},@var{reg}]}
|
|
|
|
@var{Reg} can be either @samp{X} or @samp{Y}.
|
|
@var{Data-reg}
|
|
must be one of the data registers @samp{D0}, @samp{D1} @dots{} @samp{D7}.
|
|
If any of the registers @samp{D2} @dots{} @samp{D5} are specified, then
|
|
the register value is treated as a signed value.
|
|
Otherwise it is treated as unsigned.
|
|
|
|
|
|
@end table
|
|
|
|
For example:
|
|
|
|
@smallexample
|
|
trap #197
|
|
bra *+49
|
|
bra .L0
|
|
jmp 0xFE0034
|
|
jmp [0xFD0012]
|
|
inc.b (4,x)
|
|
dec.w [4,y]
|
|
clr.p (-s)
|
|
neg.l (d0, s)
|
|
com.b [d1, x]
|
|
jsr (45, d0)
|
|
psh cch
|
|
@end smallexample
|
|
|
|
@node S12Z-Directives
|
|
@section Assembler Directives
|
|
|
|
@cindex assembler directives, S12Z
|
|
|
|
@node S12Z-opcodes
|
|
@section Opcodes
|
|
|
|
@cindex S12Z opcodes
|
|
@cindex opcodes, S12Z
|
|
@cindex instruction set, S12Z
|