Add documentation of M32R .high, .shigh and .low directives.
authorNick Clifton <nickc@redhat.com>
Mon, 7 Jul 2003 10:24:08 +0000 (10:24 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 7 Jul 2003 10:24:08 +0000 (10:24 +0000)
gas/ChangeLog
gas/doc/c-m32r.texi

index f039583..11eb9e6 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-07  Nick Clifton  <nickc@redhat.com>
+
+       * doc/c-m32r.texi (M32R-Directives): New node.  Document the
+       .high, .shigh and .low directives.
+
 2003-07-07  Richard Sandiford  <rsandifo@redhat.com>
 
        * config/tc-h8300.c (h8300sxnmode): Add prototype.
index 45f1663..a1c414c 100644 (file)
@@ -1,4 +1,4 @@
-@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000
+@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2003
 @c Free Software Foundation, Inc.
 @c This is part of the GAS manual.
 @c For copying conditions, see the file as.texinfo.
@@ -15,6 +15,7 @@
 @cindex M32R support
 @menu
 * M32R-Opts::                   M32R Options
+* M32R-Directives::             M32R Directives
 * M32R-Warnings::               M32R Warnings
 @end menu
 
@@ -76,6 +77,87 @@ option.
 
 @end table
 
+@node M32R-Directives
+@section M32R Directives
+@cindex directives, M32R
+@cindex M32R directives
+
+The Renease M32R version of @code{@value{AS}} has a few architecture
+specific directives:
+
+@table @code
+@cindex @code{.low} directive, M32R
+@item .low @var{expression}
+The @code{.low} directive computes the value of its expression and
+places the lower 16-bits of the result into the immediate-field of the
+instruction.  For example:
+
+@smallexample
+   or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 
+   add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
+@end smallexample
+
+@item .high @var{expression}
+@cindex @code{.high} directive, M32R
+The @code{.high} directive computes the value of its expression and
+places the upper 16-bits of the result into the immediate-field of the
+instruction.  For example:
+
+@smallexample
+   seth  r0, #high(0x12345678) ; compute r0 = 0x12340000 
+   seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
+@end smallexample
+
+@item .shigh @var{expression}
+@cindex @code{.shigh} directive, M32R
+The @code{.shigh} directive is very similar to the @code{.high}
+directive.  It also computes the value of its expression and places
+the upper 16-bits of the result into the immediate-field of the 
+instruction.  The difference is that @code{.shigh} also checks to see
+if the lower 16-bits could be interpreted as a signed number, and if
+so it assumes that a borrow will occur from the upper-16 bits.  To
+compensate for this the @code{.shigh} directive pre-biases the upper
+16 bit value by adding one to it.  For example:
+
+For example:
+
+@smallexample
+   seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
+   seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
+@end smallexample
+
+In the second example the lower 16-bits are 0x8000.  If these are
+treated as a signed value and sign extended to 32-bits then the value
+becomes 0xffff8000.  If this value is then added to 0x00010000 then
+the result is 0x00008000.
+
+This behaviour is to allow for the different semantics of the
+@code{or3} and @code{add3} instructions.  The @code{or3} instruction
+treats its 16-bit immediate argument as unsigned whereas the
+@code{add3} treats its 16-bit immediate as a signed value.  So for
+example:
+
+@smallexample
+   seth  r0, #shigh(0x00008000) 
+   add3  r0, r0, #low(0x00008000) 
+@end smallexample
+
+Produces the correct result in r0, whereas:
+
+@smallexample
+   seth  r0, #shigh(0x00008000) 
+   or3   r0, r0, #low(0x00008000) 
+@end smallexample
+
+Stores 0xffff8000 into r0.
+
+Note - the @code{shigh} directive does not know where in the assembly
+source code the lower 16-bits of the value are going set, so it cannot
+check to make sure that an @code{or3} instruction is being used rather
+than an @code{add3} instruction.  It is up to the programmer to make
+sure that correct directives are used.
+@end table
+
 @node M32R-Warnings
 @section M32R Warnings
 
@@ -113,7 +195,7 @@ instructions.
 
 @item unknown instruction @samp{...}
 This message is produced when the assembler encounters an instruction
-which it doe snot recognise.
+which it doenot recognise.
 
 @item only the NOP instruction can be issued in parallel on the m32r
 This message is produced when the assembler encounters a parallel