aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorDavid S. Miller <davem@redhat.com>2008-04-23 07:49:33 +0000
committerDavid S. Miller <davem@redhat.com>2008-04-23 07:49:33 +0000
commit1a6b486f7396aef713425cd01fb9861e53fb6227 (patch)
tree005659db874d5536f77947d6226f4b2c467abe4d /gas
parentb863bf13fe4722ea0aa721043285e9011eb0ea30 (diff)
downloadgdb-1a6b486f7396aef713425cd01fb9861e53fb6227.zip
gdb-1a6b486f7396aef713425cd01fb9861e53fb6227.tar.gz
gdb-1a6b486f7396aef713425cd01fb9861e53fb6227.tar.bz2
opcodes/
* sparc-opc.c (asi_table): Add UltraSPARC and Niagara extended values. (prefetch_table): Add missing values. gas/ * config/tc-sparc.c (v9a_asr_table): Add missing 'stick' and 'stick_cmpr', and document ordering rules of table. (tc_gen_reloc): Accept BFD_RELOC_SPARC_PC22 and BFD_RELOC_SPARC_PC10. * doc/c-sparc.texi: New section on Sparc constants. Add documentation for %stick and %stick_cmpr. gas/testsuite/ * gas/sparc/pc2210.d: New file. * gas/sparc/pc2210.d: Likewise. * gas/sparc/sparc.exp: Run new %pc22/%pc10 relocation test.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/tc-sparc.c7
-rw-r--r--gas/doc/c-sparc.texi142
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/sparc/pc2210.d13
-rw-r--r--gas/testsuite/gas/sparc/pc2210.s6
-rw-r--r--gas/testsuite/gas/sparc/sparc.exp1
7 files changed, 181 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 3547186..d2b627c 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2008-04-23 David S. Miller <davem@davemloft.net>
+
+ * config/tc-sparc.c (v9a_asr_table): Add missing
+ 'stick' and 'stick_cmpr', and document ordering rules
+ of table.
+ (tc_gen_reloc): Accept BFD_RELOC_SPARC_PC22 and
+ BFD_RELOC_SPARC_PC10.
+ * doc/c-sparc.texi: New section on Sparc constants.
+ Add documentation for %stick and %stick_cmpr.
+
2008-04-22 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (md_assemble): Don't check SSE instructions
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c
index 8116c8e..1b657f5 100644
--- a/gas/config/tc-sparc.c
+++ b/gas/config/tc-sparc.c
@@ -768,13 +768,16 @@ struct priv_reg_entry hpriv_reg_table[] =
{"", -1}, /* End marker. */
};
-/* v9a specific asrs. */
+/* v9a specific asrs. This table is ordered by initial
+ letter, in reverse. */
struct priv_reg_entry v9a_asr_table[] =
{
{"tick_cmpr", 23},
{"sys_tick_cmpr", 25},
{"sys_tick", 24},
+ {"stick_cmpr", 25},
+ {"stick", 24},
{"softint", 22},
{"set_softint", 20},
{"pic", 17},
@@ -3398,6 +3401,8 @@ tc_gen_reloc (section, fixp)
case BFD_RELOC_32_PCREL_S2:
case BFD_RELOC_SPARC13:
case BFD_RELOC_SPARC22:
+ case BFD_RELOC_SPARC_PC22:
+ case BFD_RELOC_SPARC_PC10:
case BFD_RELOC_SPARC_BASE13:
case BFD_RELOC_SPARC_WDISP16:
case BFD_RELOC_SPARC_WDISP19:
diff --git a/gas/doc/c-sparc.texi b/gas/doc/c-sparc.texi
index cd0884c..3e172fc 100644
--- a/gas/doc/c-sparc.texi
+++ b/gas/doc/c-sparc.texi
@@ -121,6 +121,7 @@ for their UltraSPARC and Niagara line of processors.
@menu
* Sparc-Chars:: Special Characters
* Sparc-Regs:: Register Names
+* Sparc-Constants:: Constant Names
* Sparc-Relocs:: Relocations
@end menu
@@ -185,10 +186,14 @@ processors:
The tick compare register is referred to as @samp{%tick_cmpr}.
@item
-The system tick register is referred to as @samp{%sys_tick}.
+The system tick register is referred to as @samp{%stick}. An alias,
+@samp{%sys_tick}, exists but is deprecated and should not be used
+by new software.
@item
-The system tick compare register is referred to as @samp{%sys_tick_cmpr}.
+The system tick compare register is referred to as @samp{%stick_cmpr}.
+An alias, @samp{%sys_tick_cmpr}, exists but is deprecated and should
+not be used by new software.
@item
The software interrupt register is referred to as @samp{%softint}.
@@ -334,7 +339,138 @@ to as @samp{%hver}.
@item
The hyperprivileged system tick compare register is referred
-to as @samp{%hstick_cmpr}.
+to as @samp{%hstick_cmpr}. Note that there is no @samp{%hstick}
+register, the normal @samp{%stick} is used.
+@end itemize
+
+@node Sparc-Constants
+@subsection Constants
+@cindex Sparc constants
+@cindex constants, Sparc
+
+Several Sparc instructions take an immediate operand field for
+which mnemonic names exist. Two such examples are @samp{membar}
+and @samp{prefetch}. Another example are the set of V9
+memory access instruction that allow specification of an
+address space identifier.
+
+The @samp{membar} instruction specifies a memory barrier that is
+the defined by the operand which is a bitmask. The supported
+mask mnemonics are:
+
+@itemize @bullet
+@item
+@samp{#Sync} requests that all operations (including nonmemory
+reference operations) appearing prior to the @code{membar} must have
+been performed and the effects of any exceptions become visible before
+any instructions after the @code{membar} may be initiated. This
+corresponds to @code{membar} cmask field bit 2.
+
+@item
+@samp{#MemIssue} requests that all memory reference operations
+appearing prior to the @code{membar} must have been performed before
+any memory operation after the @code{membar} may be initiated. This
+corresponds to @code{membar} cmask field bit 1.
+
+@item
+@samp{#Lookaside} requests that a store appearing prior to the
+@code{membar} must complete before any load following the
+@code{membar} referencing the same address can be initiated. This
+corresponds to @code{membar} cmask field bit 0.
+
+@item
+@samp{#StoreStore} defines that the effects of all stores appearing
+prior to the @code{membar} instruction must be visible to all
+processors before the effect of any stores following the
+@code{membar}. Equivalent to the deprecated @code{stbar} instruction.
+This corresponds to @code{membar} mmask field bit 3.
+
+@item
+@samp{#LoadStore} defines all loads appearing prior to the
+@code{membar} instruction must have been performed before the effect
+of any stores following the @code{membar} is visible to any other
+processor. This corresponds to @code{membar} mmask field bit 2.
+
+@item
+@samp{#StoreLoad} defines that the effects of all stores appearing
+prior to the @code{membar} instruction must be visible to all
+processors before loads following the @code{membar} may be performed.
+This corresponds to @code{membar} mmask field bit 1.
+
+@item
+@samp{#LoadLoad} defines that all loads appearing prior to the
+@code{membar} instruction must have been performed before any loads
+following the @code{membar} may be performed. This corresponds to
+@code{membar} mmask field bit 0.
+
+@end itemize
+
+These values can be ored together, for example:
+
+@example
+membar #Sync
+membar #StoreLoad | #LoadLoad
+membar #StoreLoad | #StoreStore
+@end example
+
+The @code{prefetch} and @code{prefetcha} instructions take a prefetch
+function code. The following prefetch function code constant
+mnemonics are available:
+
+@itemize @bullet
+@item
+@samp{#n_reads} requests a prefetch for several reads, and corresponds
+to a prefetch function code of 0.
+
+@samp{#one_read} requests a prefetch for one read, and corresponds
+to a prefetch function code of 1.
+
+@samp{#n_writes} requests a prefetch for several writes (and possibly
+reads), and corresponds to a prefetch function code of 2.
+
+@samp{#one_write} requests a prefetch for one write, and corresponds
+to a prefetch function code of 3.
+
+@samp{#page} requests a prefetch page, and corresponds to a prefetch
+function code of 4.
+
+@samp{#invalidate} requests a prefetch invalidate, and corresponds to
+a prefetch function code of 16.
+
+@samp{#unified} requests a prefetch to the nearest unified cache, and
+corresponds to a prefetch function code of 17.
+
+@samp{#n_reads_strong} requests a strong prefetch for several reads,
+and corresponds to a prefetch function code of 20.
+
+@samp{#one_read_strong} requests a strong prefetch for one read,
+and corresponds to a prefetch function code of 21.
+
+@samp{#n_writes_strong} requests a strong prefetch for several writes,
+and corresponds to a prefetch function code of 22.
+
+@samp{#one_write_strong} requests a strong prefetch for one write,
+and corresponds to a prefetch function code of 23.
+
+Onle one prefetch code may be specified. Here are some examples:
+
+@example
+prefetch [%l0 + %l2], #one_read
+prefetch [%g2 + 8], #n_writes
+prefetcha [%g1] 0x8, #unified
+prefetcha [%o0 + 0x10] %asi, #n_reads
+@end example
+
+The actual behavior of a given prefetch function code is processor
+specific. If a processor does not implement a given prefetch
+function code, it will treat the prefetch instruction as a nop.
+
+For instructions that accept an immediate address space identifier,
+@code{@value{AS}} provides many mnemonics corresponding to
+V9 defined as well as UltraSPARC and Niagara extended values.
+For example, @samp{#ASI_P} and @samp{#ASI_BLK_INIT_QUAD_LDD_AIUS}.
+See the V9 and processor specific manuals for details.
+
@end itemize
@node Sparc-Relocs
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index d8cfbcf..a331751 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-23 David S. Miller <davem@davemloft.net>
+
+ * gas/sparc/pc2210.d: New file.
+ * gas/sparc/pc2210.d: Likewise.
+ * gas/sparc/sparc.exp: Run new %pc22/%pc10 relocation test.
+
2008-04-18 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/arch-10.d: Updated.
diff --git a/gas/testsuite/gas/sparc/pc2210.d b/gas/testsuite/gas/sparc/pc2210.d
new file mode 100644
index 0000000..974d3e5
--- /dev/null
+++ b/gas/testsuite/gas/sparc/pc2210.d
@@ -0,0 +1,13 @@
+#as: -Av7
+#objdump: -dr
+#name: pc2210
+
+.*: +file format .*sparc.*
+
+Disassembly of section .text:
+
+0+ <.text>:
+ 0: 13 00 00 00 sethi %hi\(0\), %o1
+ 0: R_SPARC_PC22 .data
+ 4: 92 12 60 00 mov %o1, %o1 ! 0 <.text>
+ 4: R_SPARC_PC10 .data
diff --git a/gas/testsuite/gas/sparc/pc2210.s b/gas/testsuite/gas/sparc/pc2210.s
new file mode 100644
index 0000000..9190234
--- /dev/null
+++ b/gas/testsuite/gas/sparc/pc2210.s
@@ -0,0 +1,6 @@
+ # Test R_SPARC_PC22 and R_SPARC_PC10 relocations
+ .data
+sym: .word 0
+ .text
+ sethi %pc22(sym), %o1
+ or %o1, %pc10(sym), %o1
diff --git a/gas/testsuite/gas/sparc/sparc.exp b/gas/testsuite/gas/sparc/sparc.exp
index d3eec93..dfb6249 100644
--- a/gas/testsuite/gas/sparc/sparc.exp
+++ b/gas/testsuite/gas/sparc/sparc.exp
@@ -55,6 +55,7 @@ if [istarget sparc*-*-*] {
run_dump_test "v9branch3"
run_dump_test "v9branch4"
run_dump_test "v9branch5"
+ run_dump_test "pc2210"
run_list_test "pr4587" ""
}