Goal |
::= |
StmtList <EOF> |
StmtList |
::= |
Stmt ( StmtList )? |
Stmt |
::= |
Stat ( ";" )? |
Stat |
::= |
Label Instruction |
|
| |
Label Data |
|
| |
Label |
|
| |
Instruction |
|
| |
Data |
|
| |
SymDef |
|
| |
Directive |
Label |
::= |
<IDENTIFIER_COLON> |
|
| |
<DECIMAL_COLON> |
Instruction |
::= |
OpCode ( Operand ( "," Operand ( "," Operand )? )? )? |
Operand |
::= |
Register |
|
| |
"(" Register ")" |
|
| |
FloatRegister |
|
| |
AddrImmed ( "(" Register ")" )? |
|
| |
<FLOAT> |
Register |
::= |
<DOLLAR_DECIMAL> |
|
| |
RegisterName |
|
| |
DollarRegisterName |
FloatRegister |
::= |
<DOLLAR_F_DECIMAL> |
AddrImmed |
::= |
LabelExpr ( ( "+" | "-" ) Expr )? |
|
| |
Expr |
LabelExpr |
::= |
LabelRef ( "-" LabelRef )? |
LabelRef |
::= |
<DECIMAL_B> |
|
| |
<DECIMAL_F> |
|
| |
<IDENTIFIER> |
|
| |
"." |
Data |
::= |
DataMode DataList |
|
| |
".ascii" <STRING> |
|
| |
".asciiz" <STRING> |
|
| |
".space" Expr |
DataMode |
::= |
".byte" |
|
| |
".half" |
|
| |
".word" |
|
| |
".float" |
|
| |
".double" |
DataList |
::= |
DataExpr ( "," DataList )* |
DataExpr |
::= |
Expr ( ":" Expr )? |
|
| |
<FLOAT> ( ":" <FLOAT> )? |
SymDef |
::= |
<IDENTIFIER_EQUAL> Expr |
Directive |
::= |
SetDir |
|
| |
SegmentDir |
|
| |
AlignDir |
|
| |
SymbolDir |
|
| |
BlockDir |
|
| |
CompilerDir |
SetDir |
::= |
".set" SetDirArgs |
SetDirArgs |
::= |
"volatile" |
|
| |
"novolatile" |
|
| |
"reorder" |
|
| |
"noreorder" |
|
| |
"at" |
|
| |
"noat" |
|
| |
"macro" |
|
| |
"nomacro" |
|
| |
"bopt" |
|
| |
"nobopt" |
|
| |
"move" |
|
| |
"nomove" |
SegmentDir |
::= |
".text" |
|
| |
".data" |
|
| |
".rdata" |
|
| |
".sdata" |
AlignDir |
::= |
".align" Expr |
SymbolDir |
::= |
".globl" <IDENTIFIER> |
|
| |
".extern" <IDENTIFIER> "," Constant |
|
| |
".comm" <IDENTIFIER> "," Constant |
|
| |
".lcomm" <IDENTIFIER> "," Constant |
BlockDir |
::= |
".ent" <IDENTIFIER> ( "," Constant )? |
|
| |
".aent" <IDENTIFIER> "," Constant |
|
| |
".mask" Expr "," Expr |
|
| |
".fmask" Expr "," Expr |
|
| |
".frame" Register "," Expr "," Register |
|
| |
".end" ( <IDENTIFIER> )? |
CompilerDir |
::= |
".alias" Register "," Register |
|
| |
".bgnb" Expr |
|
| |
".endb" Expr |
|
| |
".file" Constant <STRING> |
|
| |
".galive" |
|
| |
".gjaldef" |
|
| |
".gjrlive" |
|
| |
".lab" <IDENTIFIER> |
|
| |
".livereg" Expr "," Expr |
|
| |
".noalias" Register "," Register |
|
| |
".option" "flag" |
|
| |
".verstamp" Constant Constant |
|
| |
".vreg" Expr "," Expr |
Expr |
::= |
Term Expr_ |
Expr_ |
::= |
( BinaryOp Expr Expr_ )* |
Term |
::= |
UnaryOp Term |
|
| |
Primary |
Primary |
::= |
Constant |
|
| |
"(" Expr ")" |
BinaryOp |
::= |
"*" |
|
| |
"/" |
|
| |
"%" |
|
| |
"+" |
|
| |
"-" |
|
| |
"<<" |
|
| |
">>" |
|
| |
"&" |
|
| |
"^" |
|
| |
"|" |
UnaryOp |
::= |
"+" |
|
| |
"-" |
|
| |
"~" |
|
| |
"!" |
Constant |
::= |
<DECIMAL> |
|
| |
<HEXADECIMAL> |
|
| |
<OCTAL> |
|
| |
<CHARACTER> |
|
| |
<IDENTIFIER> |
RegisterName |
::= |
"zero" |
|
| |
"at" |
|
| |
"v0" |
|
| |
"v1" |
|
| |
"a0" |
|
| |
"a1" |
|
| |
"a2" |
|
| |
"a3" |
|
| |
"t0" |
|
| |
"t1" |
|
| |
"t2" |
|
| |
"t3" |
|
| |
"t4" |
|
| |
"t5" |
|
| |
"t6" |
|
| |
"t7" |
|
| |
"s0" |
|
| |
"s1" |
|
| |
"s2" |
|
| |
"s3" |
|
| |
"s4" |
|
| |
"s5" |
|
| |
"s6" |
|
| |
"s7" |
|
| |
"t8" |
|
| |
"t9" |
|
| |
"k0" |
|
| |
"k1" |
|
| |
"gp" |
|
| |
"sp" |
|
| |
"s8" |
|
| |
"fp" |
|
| |
"ra" |
DollarRegisterName |
::= |
"$zero" |
|
| |
"$at" |
|
| |
"$v0" |
|
| |
"$v1" |
|
| |
"$a0" |
|
| |
"$a1" |
|
| |
"$a2" |
|
| |
"$a3" |
|
| |
"$t0" |
|
| |
"$t1" |
|
| |
"$t2" |
|
| |
"$t3" |
|
| |
"$t4" |
|
| |
"$t5" |
|
| |
"$t6" |
|
| |
"$t7" |
|
| |
"$s0" |
|
| |
"$s1" |
|
| |
"$s2" |
|
| |
"$s3" |
|
| |
"$s4" |
|
| |
"$s5" |
|
| |
"$s6" |
|
| |
"$s7" |
|
| |
"$t8" |
|
| |
"$t9" |
|
| |
"$k0" |
|
| |
"$k1" |
|
| |
"$gp" |
|
| |
"$sp" |
|
| |
"$s8" |
|
| |
"$fp" |
|
| |
"$ra" |
OpCode |
::= |
"abs" |
|
| |
"add" |
|
| |
"addciu" |
|
| |
"addu" |
|
| |
"and" |
|
| |
"b" |
|
| |
"bal" |
|
| |
"bc0f" |
|
| |
"bc0fl" |
|
| |
"bc0t" |
|
| |
"bc0tlbc1f" |
|
| |
"bc1fl" |
|
| |
"bc1t" |
|
| |
"bc1tl" |
|
| |
"bc2f" |
|
| |
"bc2fl" |
|
| |
"bc2t" |
|
| |
"bc2tl" |
|
| |
"beq" |
|
| |
"beql" |
|
| |
"beqz" |
|
| |
"beqzl" |
|
| |
"bge" |
|
| |
"bgel" |
|
| |
"bgeu" |
|
| |
"bgeul" |
|
| |
"bgez" |
|
| |
"bgezal" |
|
| |
"bgezall" |
|
| |
"bgezl" |
|
| |
"bgt" |
|
| |
"bgtl" |
|
| |
"bgtu" |
|
| |
"bgtul" |
|
| |
"bgtz" |
|
| |
"bgtzl" |
|
| |
"ble" |
|
| |
"blel" |
|
| |
"bleu" |
|
| |
"bleul" |
|
| |
"blez" |
|
| |
"blezl" |
|
| |
"blt" |
|
| |
"bltl" |
|
| |
"bltu" |
|
| |
"bltul" |
|
| |
"bltz" |
|
| |
"bltzal" |
|
| |
"bltzall" |
|
| |
"bltzl" |
|
| |
"bne" |
|
| |
"bnel" |
|
| |
"bnez" |
|
| |
"bnezl" |
|
| |
"break" |
|
| |
"cache" |
|
| |
"cfc0" |
|
| |
"cfc1" |
|
| |
"cfc2" |
|
| |
"ctc0" |
|
| |
"ctc1" |
|
| |
"ctc2" |
|
| |
"dabs" |
|
| |
"dadd" |
|
| |
"daddi" |
|
| |
"daddiu" |
|
| |
"daddu" |
|
| |
"ddiv" |
|
| |
"ddivd" |
|
| |
"ddivdu" |
|
| |
"ddivu" |
|
| |
"div" |
|
| |
"divd" |
|
| |
"divdu" |
|
| |
"divo" |
|
| |
"divou" |
|
| |
"divu" |
|
| |
"dla" |
|
| |
"dli" |
|
| |
"dmadd16" |
|
| |
"dmfc0" |
|
| |
"dmfc1" |
|
| |
"dmfc2" |
|
| |
"dmtc0" |
|
| |
"dmtc1" |
|
| |
"dmtc2" |
|
| |
"dmul" |
|
| |
"dmulo" |
|
| |
"dmulou" |
|
| |
"dmult" |
|
| |
"dmultu" |
|
| |
"dneg" |
|
| |
"dnegu" |
|
| |
"drem" |
|
| |
"dremu" |
|
| |
"dret" |
|
| |
"drol" |
|
| |
"dror" |
|
| |
"dsll" |
|
| |
"dsllv" |
|
| |
"dsll32" |
|
| |
"dsra" |
|
| |
"dsra32" |
|
| |
"dsrl" |
|
| |
"dsrlv" |
|
| |
"dsrl32" |
|
| |
"dsub" |
|
| |
"dsubu" |
|
| |
"eret" |
|
| |
"ffc" |
|
| |
"ffs" |
|
| |
"flushd" |
|
| |
"j" |
|
| |
"jr" |
|
| |
"jal" |
|
| |
"jalr" |
|
| |
"la" |
|
| |
"lb" |
|
| |
"lbu" |
|
| |
"ld" |
|
| |
"ldl" |
|
| |
"ldr" |
|
| |
"ldxc1" |
|
| |
"lh" |
|
| |
"lhu" |
|
| |
"li" |
|
| |
"ll" |
|
| |
"lld" |
|
| |
"lui" |
|
| |
"lw" |
|
| |
"lwc1" |
|
| |
"lwl" |
|
| |
"lwr" |
|
| |
"lwu" |
|
| |
"lwxc1" |
|
| |
"madd" |
|
| |
"maddu" |
|
| |
"mad" |
|
| |
"madu" |
|
| |
"madd16" |
|
| |
"max" |
|
| |
"mfc0" |
|
| |
"mfc1" |
|
| |
"mfc2" |
|
| |
"mfhi" |
|
| |
"mflo" |
|
| |
"min" |
|
| |
"move" |
|
| |
"movf" |
|
| |
"movn" |
|
| |
"movt" |
|
| |
"movz" |
|
| |
"msub" |
|
| |
"msubu" |
|
| |
"mtc0" |
|
| |
"mtc1" |
|
| |
"mtc2" |
|
| |
"mthi" |
|
| |
"mtlo" |
|
| |
"mul" |
|
| |
"mulu" |
|
| |
"mulo" |
|
| |
"mulou" |
|
| |
"mult" |
|
| |
"multu" |
|
| |
"neg" |
|
| |
"negu" |
|
| |
"nop" |
|
| |
"nor" |
|
| |
"not" |
|
| |
"or" |
|
| |
"ori" |
|
| |
"pref" |
|
| |
"prefx" |
|
| |
"r2u" |
|
| |
"radd" |
|
| |
"rem" |
|
| |
"remu" |
|
| |
"rfe" |
|
| |
"rmul" |
|
| |
"rol" |
|
| |
"ror" |
|
| |
"rsub" |
|
| |
"sb" |
|
| |
"sc" |
|
| |
"scd" |
|
| |
"sd" |
|
| |
"sdbbp" |
|
| |
"sdc1" |
|
| |
"sdl" |
|
| |
"sdr" |
|
| |
"sdxc1" |
|
| |
"selsl" |
|
| |
"selsr" |
|
| |
"seq" |
|
| |
"sge" |
|
| |
"sgeu" |
|
| |
"sgt" |
|
| |
"sgtu" |
|
| |
"sh" |
|
| |
"sle" |
|
| |
"sleu" |
|
| |
"sll" |
|
| |
"sllv" |
|
| |
"slt" |
|
| |
"slti" |
|
| |
"sltiu" |
|
| |
"sltu" |
|
| |
"sne" |
|
| |
"sra" |
|
| |
"srav" |
|
| |
"srl" |
|
| |
"srlv" |
|
| |
"standby" |
|
| |
"sub" |
|
| |
"subu" |
|
| |
"suspend" |
|
| |
"sw" |
|
| |
"swc1" |
|
| |
"swl" |
|
| |
"swr" |
|
| |
"swxc1" |
|
| |
"sync" |
|
| |
"syscall" |
|
| |
"teq" |
|
| |
"teqi" |
|
| |
"tge" |
|
| |
"tgei" |
|
| |
"tgeiu" |
|
| |
"tgeu" |
|
| |
"tlbp" |
|
| |
"tlbr" |
|
| |
"tlbwi" |
|
| |
"tlbwr" |
|
| |
"tlt" |
|
| |
"tlti" |
|
| |
"tltiu" |
|
| |
"tltu" |
|
| |
"tne" |
|
| |
"tnei" |
|
| |
"u2r" |
|
| |
"uld" |
|
| |
"ulh" |
|
| |
"ulhu" |
|
| |
"ulw" |
|
| |
"usd" |
|
| |
"ushusw" |
|
| |
"waiti" |
|
| |
"wb" |
|
| |
"xor" |
|
| |
"xori" |
|
| |
"abs.s" |
|
| |
"add.s" |
|
| |
"c.eq.s" |
|
| |
"c.f.s" |
|
| |
"c.le.s" |
|
| |
"c.lt.s" |
|
| |
"c.nge.s" |
|
| |
"c.ngl.s" |
|
| |
"c.ngt.s" |
|
| |
"c.ole.s" |
|
| |
"c.olt.s" |
|
| |
"c.seq.s" |
|
| |
"c.sf.s" |
|
| |
"c.ueq.s" |
|
| |
"c.ule.s" |
|
| |
"c.ult.s" |
|
| |
"c.un.s" |
|
| |
"ceil.l.d" |
|
| |
"ceil.l.s" |
|
| |
"ceil.w.d" |
|
| |
"ceil.w.s" |
|
| |
"cvt.d.l" |
|
| |
"cvt.d.s" |
|
| |
"cvt.d.w" |
|
| |
"cvt.l.d" |
|
| |
"cvt.l.s" |
|
| |
"cvt.s.d" |
|
| |
"cvt.s.l" |
|
| |
"cvt.s.w" |
|
| |
"cvt.w.d" |
|
| |
"cvt.w.s" |
|
| |
"div.s" |
|
| |
"floor.l.d" |
|
| |
"floor.l.s" |
|
| |
"floor.w.d" |
|
| |
"floor.w.s" |
|
| |
"l.d" |
|
| |
"l.s" |
|
| |
"ldc1" |
|
| |
"madd.s" |
|
| |
"mov.s" |
|
| |
"movf.s" |
|
| |
"movn.s" |
|
| |
"movt.s" |
|
| |
"movz.s" |
|
| |
"msub.s" |
|
| |
"mul.s" |
|
| |
"neg.s" |
|
| |
"nmadd.s" |
|
| |
"nmsub.s" |
|
| |
"recip.s" |
|
| |
"round.l.d" |
|
| |
"round.l.s" |
|
| |
"round.w.d" |
|
| |
"round.w.s" |
|
| |
"rsqrt.s" |
|
| |
"s.d" |
|
| |
"s.s" |
|
| |
"sqrt.s" |
|
| |
"sub.s" |
|
| |
"trunc.l.d" |
|
| |
"trunc.l.s" |