<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<!-- MIPS/SPIM Assembly Mode from
	Marc Rummel marc.rummel@stud.uni-karlsruhe.de
	SIPM Homepage: http://www.cs.wisc.edu/~larus/spim.html
-->

<MODE>

	<PROPS>
		<PROPERTY NAME="blockComment" VALUE="#" />
		<PROPERTY NAME="wordBreakChars" VALUE=",()" />
		<PROPERTY NAME="contextInsensitive" VALUE="true"/>
	</PROPS>

	<RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">
		<!-- Comment -->
		<EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>

		<!-- Strings -->
		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
			<BEGIN>'</BEGIN>
			<END>'</END>
		</SPAN>

		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
			<BEGIN>"</BEGIN>
			<END>"</END>
		</SPAN>

		<!-- Labels -->
		<MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE">:</MARK_PREVIOUS>

		<!-- Assembler directives -->
		<KEYWORDS>
			<KEYWORD1>.align</KEYWORD1>
			<KEYWORD1>.ascii</KEYWORD1>
			<KEYWORD1>.asciiz</KEYWORD1>
			<KEYWORD1>.byte</KEYWORD1>
			<KEYWORD1>.data</KEYWORD1>
			<KEYWORD1>.double</KEYWORD1>
			<KEYWORD1>.extern</KEYWORD1>
			<KEYWORD1>.float</KEYWORD1>
			<KEYWORD1>.globl</KEYWORD1>
			<KEYWORD1>.half</KEYWORD1>
			<KEYWORD1>.kdata</KEYWORD1>
			<KEYWORD1>.ktext</KEYWORD1>
			<KEYWORD1>.space</KEYWORD1>
			<KEYWORD1>.text</KEYWORD1>
			<KEYWORD1>.word</KEYWORD1>

		<!-- MIPS/SPIM Operations -->
			<FUNCTION>add</FUNCTION>
			<FUNCTION>addi</FUNCTION>
			<FUNCTION>addu</FUNCTION>
			<FUNCTION>addiu</FUNCTION>
			<FUNCTION>and</FUNCTION>
			<FUNCTION>andi</FUNCTION>
			<FUNCTION>div</FUNCTION>
			<FUNCTION>divu</FUNCTION>
			<FUNCTION>mul</FUNCTION>
			<FUNCTION>mulo</FUNCTION>
			<FUNCTION>mulou</FUNCTION>
			<FUNCTION>mult</FUNCTION>
			<FUNCTION>multu</FUNCTION>
			<FUNCTION>neg</FUNCTION>
			<FUNCTION>negu</FUNCTION>
			<FUNCTION>nor</FUNCTION>
			<FUNCTION>not</FUNCTION>
			<FUNCTION>or</FUNCTION>
			<FUNCTION>ori</FUNCTION>
			<FUNCTION>rem</FUNCTION>
			<FUNCTION>remu</FUNCTION>
			<FUNCTION>rol</FUNCTION>
			<FUNCTION>ror</FUNCTION>
			<FUNCTION>sll</FUNCTION>
			<FUNCTION>sllv</FUNCTION>
			<FUNCTION>sra</FUNCTION>
			<FUNCTION>srav</FUNCTION>
			<FUNCTION>srl</FUNCTION>
			<FUNCTION>srlv</FUNCTION>
			<FUNCTION>sub</FUNCTION>
			<FUNCTION>subu</FUNCTION>
			<FUNCTION>xor</FUNCTION>
			<FUNCTION>xori</FUNCTION>
			<FUNCTION>li</FUNCTION>
			<FUNCTION>lui</FUNCTION>
			<FUNCTION>seq</FUNCTION>
			<FUNCTION>sge</FUNCTION>
			<FUNCTION>sgt</FUNCTION>
			<FUNCTION>sgtu</FUNCTION>
			<FUNCTION>sle</FUNCTION>
			<FUNCTION>sleu</FUNCTION>
			<FUNCTION>slt</FUNCTION>
			<FUNCTION>slti</FUNCTION>
			<FUNCTION>sltu</FUNCTION>
			<FUNCTION>sltiu</FUNCTION>
			<FUNCTION>sne</FUNCTION>
			<FUNCTION>b</FUNCTION>
			<FUNCTION>bczt</FUNCTION>
			<FUNCTION>bczf</FUNCTION>
			<FUNCTION>beq</FUNCTION>
			<FUNCTION>beqz</FUNCTION>
			<FUNCTION>bge</FUNCTION>
			<FUNCTION>bgeu</FUNCTION>
			<FUNCTION>bgez</FUNCTION>
			<FUNCTION>bgezal</FUNCTION>
			<FUNCTION>bgt</FUNCTION>
			<FUNCTION>bgtu</FUNCTION>
			<FUNCTION>bgtz</FUNCTION>
			<FUNCTION>ble</FUNCTION>
			<FUNCTION>bleu</FUNCTION>
			<FUNCTION>blez</FUNCTION>
			<FUNCTION>bgezal</FUNCTION>
			<FUNCTION>bltzal</FUNCTION>
			<FUNCTION>blt</FUNCTION>
			<FUNCTION>bltu</FUNCTION>
			<FUNCTION>bltz</FUNCTION>
			<FUNCTION>bne</FUNCTION>
			<FUNCTION>bnez</FUNCTION>
			<FUNCTION>j</FUNCTION>
			<FUNCTION>jal</FUNCTION>
			<FUNCTION>jalr</FUNCTION>
			<FUNCTION>jr</FUNCTION>
			<FUNCTION>la</FUNCTION>
			<FUNCTION>lb</FUNCTION>
			<FUNCTION>blu</FUNCTION>
			<FUNCTION>lh</FUNCTION>
			<FUNCTION>lhu</FUNCTION>
			<FUNCTION>lw</FUNCTION>
			<FUNCTION>lwcz</FUNCTION>
			<FUNCTION>lwl</FUNCTION>
			<FUNCTION>lwr</FUNCTION>
			<FUNCTION>ulh</FUNCTION>
			<FUNCTION>ulhu</FUNCTION>
			<FUNCTION>ulw</FUNCTION>
			<FUNCTION>sb</FUNCTION>
			<FUNCTION>sd</FUNCTION>
			<FUNCTION>sh</FUNCTION>
			<FUNCTION>sw</FUNCTION>
			<FUNCTION>swcz</FUNCTION>
			<FUNCTION>swl</FUNCTION>
			<FUNCTION>swr</FUNCTION>
			<FUNCTION>ush</FUNCTION>
			<FUNCTION>usw</FUNCTION>
			<FUNCTION>move</FUNCTION>
			<FUNCTION>mfhi</FUNCTION>
			<FUNCTION>mflo</FUNCTION>
			<FUNCTION>mthi</FUNCTION>
			<FUNCTION>mtlo</FUNCTION>
			<FUNCTION>mfcz</FUNCTION>
			<FUNCTION>mfc1.d</FUNCTION>
			<FUNCTION>mtcz</FUNCTION>
			<FUNCTION>abs.d</FUNCTION>
			<FUNCTION>abs.s</FUNCTION>
			<FUNCTION>add.d</FUNCTION>
			<FUNCTION>add.s</FUNCTION>
			<FUNCTION>c.eq.d</FUNCTION>
			<FUNCTION>c.eq.s</FUNCTION>
			<FUNCTION>c.le.d</FUNCTION>
			<FUNCTION>c.le.s</FUNCTION>
			<FUNCTION>c.lt.d</FUNCTION>
			<FUNCTION>c.lt.s</FUNCTION>
			<FUNCTION>cvt.d.s</FUNCTION>
			<FUNCTION>cbt.d.w</FUNCTION>
			<FUNCTION>cvt.s.d</FUNCTION>
			<FUNCTION>cvt.s.w</FUNCTION>
			<FUNCTION>cvt.w.d</FUNCTION>
			<FUNCTION>cvt.w.s</FUNCTION>
			<FUNCTION>div.d</FUNCTION>
			<FUNCTION>div.s</FUNCTION>
			<FUNCTION>l.d</FUNCTION>
			<FUNCTION>l.s</FUNCTION>
			<FUNCTION>mov.d</FUNCTION>
			<FUNCTION>mov.s</FUNCTION>
			<FUNCTION>mul.d</FUNCTION>
			<FUNCTION>mul.s</FUNCTION>
			<FUNCTION>neg.d</FUNCTION>
			<FUNCTION>neg.s</FUNCTION>
			<FUNCTION>s.d</FUNCTION>
			<FUNCTION>s.s</FUNCTION>
			<FUNCTION>sub.d</FUNCTION>
			<FUNCTION>sub.s</FUNCTION>
			<FUNCTION>rfe</FUNCTION>
			<FUNCTION>syscall</FUNCTION>
			<FUNCTION>break</FUNCTION>
			<FUNCTION>nop</FUNCTION>

		<!-- Integer Registers -->
			<KEYWORD2>$zero</KEYWORD2>
			<KEYWORD2>$at</KEYWORD2>
			<KEYWORD2>$v0</KEYWORD2>
			<KEYWORD2>$v1</KEYWORD2>
			<KEYWORD2>$a0</KEYWORD2>
			<KEYWORD2>$a1</KEYWORD2>
			<KEYWORD2>$a2</KEYWORD2>
			<KEYWORD2>$a3</KEYWORD2>
            <KEYWORD2>$t0</KEYWORD2>
			<KEYWORD2>$t1</KEYWORD2>
			<KEYWORD2>$t2</KEYWORD2>
			<KEYWORD2>$t3</KEYWORD2>
			<KEYWORD2>$t4</KEYWORD2>
			<KEYWORD2>$t5</KEYWORD2>
			<KEYWORD2>$t6</KEYWORD2>
			<KEYWORD2>$t7</KEYWORD2>
			<KEYWORD2>$s0</KEYWORD2>
			<KEYWORD2>$s1</KEYWORD2>
			<KEYWORD2>$s2</KEYWORD2>
			<KEYWORD2>$s3</KEYWORD2>
			<KEYWORD2>$s4</KEYWORD2>
			<KEYWORD2>$s5</KEYWORD2>
			<KEYWORD2>$s6</KEYWORD2>
			<KEYWORD2>$s7</KEYWORD2>
			<KEYWORD2>$t8</KEYWORD2>
			<KEYWORD2>$t9</KEYWORD2>
			<KEYWORD2>$k0</KEYWORD2>
			<KEYWORD2>$k1</KEYWORD2>
            <KEYWORD2>$gp</KEYWORD2>
			<KEYWORD2>$sp</KEYWORD2>
			<KEYWORD2>$fp</KEYWORD2>
			<KEYWORD2>$ra</KEYWORD2>

		<!-- Floating Point Registers -->
			<KEYWORD3>$f0</KEYWORD3>
			<KEYWORD3>$f1</KEYWORD3>
			<KEYWORD3>$f2</KEYWORD3>
			<KEYWORD3>$f3</KEYWORD3>
			<KEYWORD3>$f4</KEYWORD3>
			<KEYWORD3>$f5</KEYWORD3>
			<KEYWORD3>$f6</KEYWORD3>
			<KEYWORD3>$f7</KEYWORD3>
			<KEYWORD3>$f8</KEYWORD3>
			<KEYWORD3>$f9</KEYWORD3>
			<KEYWORD3>$f10</KEYWORD3>
			<KEYWORD3>$f11</KEYWORD3>
			<KEYWORD3>$f12</KEYWORD3>
			<KEYWORD3>$f13</KEYWORD3>
			<KEYWORD3>$f14</KEYWORD3>
			<KEYWORD3>$f15</KEYWORD3>
			<KEYWORD3>$f16</KEYWORD3>
			<KEYWORD3>$f17</KEYWORD3>
			<KEYWORD3>$f18</KEYWORD3>
			<KEYWORD3>$f19</KEYWORD3>
			<KEYWORD3>$f20</KEYWORD3>
			<KEYWORD3>$f21</KEYWORD3>
			<KEYWORD3>$f22</KEYWORD3>
			<KEYWORD3>$f23</KEYWORD3>
			<KEYWORD3>$f24</KEYWORD3>
			<KEYWORD3>$f25</KEYWORD3>
			<KEYWORD3>$f26</KEYWORD3>
			<KEYWORD3>$f27</KEYWORD3>
			<KEYWORD3>$f28</KEYWORD3>
			<KEYWORD3>$f29</KEYWORD3>
			<KEYWORD3>$f30</KEYWORD3>
			<KEYWORD3>$f31</KEYWORD3>
		</KEYWORDS>
	</RULES>
</MODE>
