@c Copyright 2009, 2011
@c 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 SCORE-Dependent
@chapter SCORE Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter SCORE Dependent Features
@end ifclear

@cindex SCORE processor
@menu
* SCORE-Opts::   	Assembler options
* SCORE-Pseudo::        SCORE Assembler Directives
* SCORE-Syntax::        Syntax
@end menu

@node SCORE-Opts 
@section Options

@cindex options for SCORE
@cindex SCORE options
@cindex architectures, SCORE
@cindex SCORE architectures

The following table lists all available SCORE options.

@table @code
@item -G @var{num}
This option sets the largest size of an object that can be referenced
implicitly with the @code{gp} register. The default value is 8.

@item -EB
Assemble code for a big-endian cpu

@itemx -EL
Assemble code for a little-endian cpu

@item -FIXDD 
Assemble code for fix data dependency

@item -NWARN 
Assemble code for no warning message for fix data dependency

@item -SCORE5
Assemble code for target is SCORE5

@itemx -SCORE5U
Assemble code for target is SCORE5U

@itemx -SCORE7
Assemble code for target is SCORE7, this is default setting

@itemx -SCORE3
Assemble code for target is SCORE3

@item -march=score7
Assemble code for target is SCORE7, this is default setting

@item -march=score3
Assemble code for target is SCORE3

@item -USE_R1 
Assemble code for no warning message when using temp register r1

@item -KPIC
Generate code for PIC.  This option tells the assembler to generate
score position-independent macro expansions.  It also tells the
assembler to mark the output file as PIC.

@item -O0
Assembler will not perform any optimizations

@item -V 
Sunplus release version

@end table

@node SCORE-Pseudo
@section SCORE Assembler Directives

@cindex directives for SCORE
@cindex SCORE directives
A number of assembler directives are available for SCORE.  The
following table is far from complete.

@table @code
@item .set nwarn 
Let the assembler not to generate warnings if the source machine 
language instructions happen data dependency.

@item .set fixdd 
Let the assembler to insert bubbles (32 bit nop instruction / 
16 bit nop! Instruction) if the source machine language instructions 
happen data dependency.

@item .set nofixdd 
Let the assembler to generate warnings if the source machine 
language instructions happen data dependency. (Default)

@item .set r1
Let the assembler not to generate warnings if the source program 
uses r1. allow user to use r1 

@item set nor1
Let the assembler to generate warnings if the source program uses
r1. (Default)

@item .sdata
Tell the assembler to add subsequent data into the sdata section  

@item .rdata
Tell the assembler to add subsequent data into the rdata section

@item .frame "frame-register", "offset", "return-pc-register"
Describe a stack frame. "frame-register" is the frame register, 
"offset" is the distance from the frame register to the virtual 
frame pointer, "return-pc-register" is the return program register. 
You must use ".ent" before ".frame" and only one ".frame" can be 
used per ".ent". 

@item .mask "bitmask", "frameoffset"
Indicate which of the integer registers are saved in the current 
function's stack frame, this is for the debugger to explain the 
frame chain.

@item .ent "proc-name"
Set the beginning of the procedure "proc_name". Use this directive 
when you want to generate information for the debugger. 

@item .end proc-name
Set the end of a procedure. Use this directive to generate information 
for the debugger. 

@item .bss
Switch the destination of following statements into the bss section, 
which is used for data that is uninitialized anywhere.  

@end table

@node SCORE-Syntax
@section SCORE Syntax
@menu
* SCORE-Chars::                Special Characters
@end menu

@node SCORE-Chars
@subsection Special Characters

@cindex line comment character, SCORE
@cindex SCORE line comment character
The presence of a @samp{#} appearing anywhere on a line indicates the
start of a comment that extends to the end of that line.

If a @samp{#} appears as the first character of a line then the whole
line is treated as a comment, but in this case the line can also be a
logical line number directive (@pxref{Comments}) or a preprocessor
control command (@pxref{Preprocessing}).

@cindex line separator, SCORE
@cindex statement separator, SCORE
@cindex SCORE line separator
The @samp{;} character can be used to separate statements on the same
line.
