| 1 | @c Copyright (C) 2007-2019 Free Software Foundation, Inc. |
| 2 | @c This is part of the GAS manual. |
| 3 | @c For copying conditions, see the file as.texinfo. |
| 4 | |
| 5 | @ifset GENERIC |
| 6 | @page |
| 7 | @node CR16-Dependent |
| 8 | @chapter CR16 Dependent Features |
| 9 | @end ifset |
| 10 | @ifclear GENERIC |
| 11 | @node Machine Dependencies |
| 12 | @chapter CR16 Dependent Features |
| 13 | @end ifclear |
| 14 | |
| 15 | @cindex CR16 support |
| 16 | @menu |
| 17 | * CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers |
| 18 | * CR16 Syntax:: Syntax for the CR16 |
| 19 | @end menu |
| 20 | |
| 21 | @node CR16 Operand Qualifiers |
| 22 | @section CR16 Operand Qualifiers |
| 23 | @cindex CR16 Operand Qualifiers |
| 24 | |
| 25 | The National Semiconductor CR16 target of @code{@value{AS}} has a few machine dependent operand qualifiers. |
| 26 | |
| 27 | Operand expression type qualifier is an optional field in the instruction operand, to determines the type of the expression field of an operand. The @code{@@} is required. CR16 architecture uses one of the following expression qualifiers: |
| 28 | |
| 29 | @table @code |
| 30 | @item s |
| 31 | - @code{Specifies expression operand type as small} |
| 32 | @item m |
| 33 | - @code{Specifies expression operand type as medium} |
| 34 | @item l |
| 35 | - @code{Specifies expression operand type as large} |
| 36 | @item c |
| 37 | - @code{Specifies the CR16 Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.} |
| 38 | @item got/GOT |
| 39 | - @code{Specifies the CR16 Assembler generates a relocation entry for the operand, offset from Global Offset Table. The linker uses this relocation entry to update the operand address at link time} |
| 40 | @item cgot/cGOT |
| 41 | - @code{Specifies the CompactRISC Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.} |
| 42 | @end table |
| 43 | |
| 44 | CR16 target operand qualifiers and its size (in bits): |
| 45 | |
| 46 | @table @samp |
| 47 | @item Immediate Operand: s |
| 48 | 4 bits. |
| 49 | |
| 50 | @item Immediate Operand: m |
| 51 | 16 bits, for movb and movw instructions. |
| 52 | |
| 53 | @item Immediate Operand: m |
| 54 | 20 bits, movd instructions. |
| 55 | |
| 56 | @item Immediate Operand: l |
| 57 | 32 bits. |
| 58 | |
| 59 | @item Absolute Operand: s |
| 60 | Illegal specifier for this operand. |
| 61 | |
| 62 | @item Absolute Operand: m |
| 63 | 20 bits, movd instructions. |
| 64 | |
| 65 | @item Displacement Operand: s |
| 66 | 8 bits. |
| 67 | |
| 68 | @item Displacement Operand: m |
| 69 | 16 bits. |
| 70 | |
| 71 | @item Displacement Operand: l |
| 72 | 24 bits. |
| 73 | |
| 74 | @end table |
| 75 | |
| 76 | For example: |
| 77 | @example |
| 78 | 1 @code{movw $_myfun@@c,r1} |
| 79 | |
| 80 | This loads the address of _myfun, shifted right by 1, into r1. |
| 81 | |
| 82 | 2 @code{movd $_myfun@@c,(r2,r1)} |
| 83 | |
| 84 | This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. |
| 85 | |
| 86 | 3 @code{_myfun_ptr:} |
| 87 | @code{.long _myfun@@c} |
| 88 | @code{loadd _myfun_ptr, (r1,r0)} |
| 89 | @code{jal (r1,r0)} |
| 90 | |
| 91 | This .long directive, the address of _myfunc, shifted right by 1 at link time. |
| 92 | |
| 93 | 4 @code{loadd _data1@@GOT(r12), (r1,r0)} |
| 94 | |
| 95 | This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. |
| 96 | |
| 97 | 5 @code{loadd _myfunc@@cGOT(r12), (r1,r0)} |
| 98 | |
| 99 | This loads the address of _myfun, shifted right by 1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r1-r0. |
| 100 | @end example |
| 101 | |
| 102 | @node CR16 Syntax |
| 103 | @section CR16 Syntax |
| 104 | @menu |
| 105 | * CR16-Chars:: Special Characters |
| 106 | @end menu |
| 107 | |
| 108 | @node CR16-Chars |
| 109 | @subsection Special Characters |
| 110 | |
| 111 | @cindex line comment character, CR16 |
| 112 | @cindex CR16 line comment character |
| 113 | The presence of a @samp{#} on a line indicates the start of a comment |
| 114 | that extends to the end of the current line. If the @samp{#} appears |
| 115 | as the first character of a line, the whole line is treated as a |
| 116 | comment, but in this case the line can also be a logical line number |
| 117 | directive (@pxref{Comments}) or a preprocessor control command |
| 118 | (@pxref{Preprocessing}). |
| 119 | |
| 120 | @cindex line separator, CR16 |
| 121 | @cindex statement separator, CR16 |
| 122 | @cindex CR16 line separator |
| 123 | The @samp{;} character can be used to separate statements on the same |
| 124 | line. |