<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd"
[
        <!ENTITY conditioncode    "(eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)">
]>
<!--
	written by miniBill and bla@smashthestack.org
-->

<language name="Assember ARM" version="1.10" kateversion="2.4" section="Assembler" extensions="*.s;*.S" mimetype="text/x-asm" author="miniBill,bla" license="GPL">
	<highlighting>
		<list name="keywords">
			<item>.include</item>

			<item>.arch</item>
			<item>.arch_extension</item>
			<item>.object_arch</item>
			<item>.eabi_attribute</item>
			<item>.fpu</item>
			<item>.cpu</item>
			<item>.code</item>
			<item>.syntax</item>
			<item>.arm</item>
			<item>.force_thumb</item>
			<item>.thumb</item>
			<item>.thumb_set</item>
			<item>.thumb_func</item>	
			<item>.func</item>
			<item>.endfunc</item>
			<item>.personality</item>
			<item>.personalityindex</item>
			<item>.mri</item>		<!-- different dialect mode -->

			<!-- generate stack frame helpers -->
			<item>.save</item>		<!-- pseudo push-->
			<item>.vsave</item>		<!-- pseudo vpush-->
			<item>.pad</item>
			<item>.cat_unwind</item>
			<item>.unwind_raw</item>
			<item>.fnend</item>
			<item>.fnstart</item>
			<item>.setfp</item>
			<item>.movsp</item>
			<item>.tlsdescseq</item>

			<item>.ltorg</item>		<!-- suggest place for literal pool -->
			<item>.pool</item>		<!-- alias for .ltorg -->

			<item>inst</item>
			<item>inst.n</item>
			<item>inst.w</item>
			
			<item>.balign</item>
			<item>.align</item>
			<item>.balignl</item>
			<item>.balignw</item>
			<item>.p2align</item>
			<item>.p2alignl</item>
			<item>.p2alignw</item>
			<item>.even</item>


			<item>.req</item>		<!-- alisas for normal registers -->
			<item>.dn</item>		<!-- alisas for vfp registers -->
			<item>.qn</item>		<!-- alisas for neon registers -->
			<item>.unreq</item>
			
			<item>.equ</item>		<!-- declare constants -->
			<item>.set</item>
			<item>.equiv</item>

			<item>.byte</item>		<!-- define data -->
			<item>.short</item>
			<item>.hword</item>
			<item>.int</item>
			<item>.word</item>
			<item>.rva</item>
			<item>.long</item>
			<item>.quad</item>
			<item>.octa</item>
			<item>.float</item>
			<item>.single</item>
			<item>.double</item>
			<item>.ldouble</item>
			<item>.extend</item>
			<item>.packed</item>		<!-- 12 byte packed floating point format-->
			<item>.ascii</item>
			<item>.asciz</item>
			<item>.string</item>
			<item>.struct</item>
			<item>.uleb128</item>
			<item>.sleb128</item>
			<item>.2byte</item>
			<item>.4byte</item>
			<item>.8byte</item>
			<item>.dc</item>
			<item>.dc.b</item>
			<item>.dc.d</item>
			<item>.dc.l</item>
			<item>.dc.s</item>
			<item>.dc.w</item>
			<item>.dc.x</item>

			<item>.ds</item>		<!-- repeat defined data -->
			<item>.ds.b</item>
			<item>.ds.d</item>
			<item>.ds.l</item>
			<item>.ds.p</item>
			<item>.ds.s</item>
			<item>.ds.w</item>
			<item>.ds.x</item>      
			<item>.dcb</item>		<!-- declare block of N items space-->
			<item>.dcb.b</item>
			<item>.dcb.d</item>
			<item>.dcb.l</item>
			<item>.dcb.s</item>
			<item>.dcb.w</item>
			<item>.dcb.x</item>
			<item>.space</item>
			<item>.fill</item>
			<item>.zero</item>
			<item>.skip</item>
			<item>.org</item>
			<item>.offset</item>

			<item>.rep</item>		<!-- repeat block -->
			<item>.rept</item>
			<item>.irp</item>
			<item>.irep</item>
			<item>.irepc</item>
			<item>.irpc</item>
			<item>.endr</item>

			<item>.macro</item>
			<item>.exitm</item>		<!-- exit early from macro-->
			<item>.purgem</item>		<!-- undefine macro name-->
			<item>.endm</item>
			<item>.mexit</item>		<!-- endm alias-->

			<item>.section</item>
			<item>.sect</item>
			<item>.sect.s</item>
			<item>.section.s</item>
			<item>.subsection</item>
			<item>.pushsection</item>
			<item>.popsection</item>
			<item>.previous</item>
			<item>.text</item>
			<item>.bss</item>
			<item>.data</item>
			<item>.version</item>		<!-- add a .note section with a version string to elf-->
			<item>.linkonce</item> 		<!-- only link one of the sections with same name -->
			
			<!-- symbol visibility -->
			<item>.global</item>		<!-- visible towards ld-->
			<item>.globl</item>
			<item>.local</item>
			<item>.weak</item>
			<item>.hidden</item>		<!-- ELF symbol visibility -->
			<item>.protected</item>
			<item>.internal</item>
			<item>.symver</item>		<!-- tie symbol to version, ie in libraries-->
			<item>.secrel32</item>		<!-- generate PE relocation info -->
			<item>.vtable_entry</item>
			<item>.vtable_inherit</item>
			
			<!-- declare or reserve common symbols, these may be merged by the linker with others object file's symbol with the same name-->
			<item>.comm</item>	
			<item>.lcomm</item>
			<item>.common</item>
			<item>.common.s</item>
			<item>.xcom</item>
			
			<item>.abort</item>
			<item>.fail</item>
			<item>.err</item>
			<item>.error</item>
			<item>.print</item>
			

			<item>.if</item>
			<item>.else</item>
			<item>.elseif</item>
			<item>.ifeq</item>
			<item>.ifne</item>
			<item>.ifge</item>
			<item>.ifgt</item>
			<item>.ifle</item>
			<item>.iflt</item>
			<item>.ifeqs</item>		<!-- compare strings-->
			<item>.ifnes</item>
			<item>.ifc</item>		<!-- compare strings-->
			<item>.ifnc</item>
			<item>.elsec</item>
			<item>.endc</item>
			<item>.ifdef</item>
			<item>.ifndef</item>
			<item>.ifnotdef</item>
			<item>.endif</item>
			

			<!-- control generated listing: as -a file.s -->
			<item>.psize</item>		<!-- page size lines,columns -->
			<item>.nolist</item>		<!-- don't output instructions in listing anymore-->
			<item>.list</item>		<!-- output instructions again-->
			<item>.eject</item>		<!-- new page -->
			<item>.title</item>		<!-- title on every page -->
			<item>.ttl</item>		<!-- alias for .title-->
			<item>.sbttl</item>		<!-- subtitle on every page -->
			<item>.page</item>		<!-- listing is split in pages-->
			<item>.nopage</item>		<!-- listing is not split in pages-->
			<item>.plen</item>		<!-- lines per page-->
			
			<!-- add debugging information -->
			<item>.file</item>
			<item>.app-file</item>		<!-- alias or ignored -->
			<item>.scl</item>
			<item>.size</item>
			<item>.line</item>
			<item>.loc</item>
			<item>.appline</item>		<!-- alias or ignored-->
			<item>.stabd</item> 		<!-- emit symbols to the symbol table -->
			<item>.stabn</item>
			<item>.stabs</item>
			<item>.xstabs</item>
			<item>.debug</item>
			
			
			<item>.end</item>
			
			<!-- for compatibility, these are ignored -->
			<item>.ident</item>	
			<item>.lflags</item>
			<item>.desc</item>
			<item>.extern</item>
			
			<!-- unknown but accepted -->
			<item>.llen</item>
			<item>.lsym</item>
			<item>.format</item>
			<item>.noformat</item>
			<item>.name</item>
			<item>.spc</item>
			<item>.xdef</item>
			<item>.xref</item>

		</list>
    
		<list name="registers">
			<item>sp</item>
			<item>lr</item>
			<item>pc</item>
			<item>cpsr</item>
			<item>apsr</item>
			<item>apsr_nzcv</item>
			<item>fpsid</item>
			<item>fpexc</item>
			<item>fpscr</item>
		</list>

		<list name="op2shift">
			<item>asr</item>
			<item>lsl</item>
			<item>lsr</item>
			<item>ror</item>
			<item>rrx</item>
		</list>

		<contexts>
			<context attribute="Normal Text" lineEndContext="#stay" name="Normal">
				<RegExpr attribute="Label"   context="#stay" String="([_\w\d-]|\.)*\s*:" />
				<keyword attribute="Keyword" context="nomore" String="keywords"/>
				<AnyChar attribute="Comment" context="Comment" String="@#"/>

				<StringDetect insensitive="true" attribute="Opcode" context="addrInst" String="ldm"/>
				<StringDetect insensitive="true" attribute="Opcode" context="addrInst" String="stm"/>
				<StringDetect insensitive="true" attribute="Opcode" context="addrInst" String="rfe"/>
				<StringDetect insensitive="true" attribute="Opcode" context="addrInst" String="srs"/>
				
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst"  String="movt"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst"  String="movw"/>
				<StringDetect insensitive="true" attribute="Opcode" context="SccInst" String="mov"/>
				<StringDetect insensitive="true" attribute="Opcode" context="SccInst" String="mvn"/>
				
				<RegExpr insensitive="true" attribute="Opcode" context="SccInst" String="add|adc|sub|rsb|sbc|rsc"/>
				<RegExpr insensitive="true" attribute="Opcode" context="SccInst" String="and|orr|eor|bic|orn"/>
				<RegExpr insensitive="true" attribute="Opcode" context="SccInst" String="asr|lsl|lsr|ror|rrx"/>
				
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(ldr|str)ex[bhd]?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(ldr|str)d"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(ldr|str)s?[bh]?t?"/>
				
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="pl(d|dw|i)"/>
				
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(mul|mla)s?|mls"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(umull|umlal|smull|smlal)"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(smul|smla)w[tb]"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(smul|smla)[tb][tb]"/>
				
				
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="mia[tb][tb]"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="miaph"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="mia"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(smuad|smusd)x?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(smlad|smlsd)x?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(smlald|smlsld)x?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(smmul|smmla|smmls)r?"/>

				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="smlal[tb][tb]"/>
				
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="qadd|qsub|qdadd|qdsub"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="(sxt|uxt)a?"/>
				
				
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="mcrr?2?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="mrr?c2?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="ldc2?l?"/>
				<RegExpr insensitive="true" attribute="Opcode" context="ccInst" String="stc2?l?"/>

				
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="adr"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="bfc"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="bfi"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="cdp2"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="cdp"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="clrex"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="clz"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="cmn"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="cmp"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="dbg"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="dmb"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="dsb"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="isb"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="mar"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="mra"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="mrs"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="msr"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="nop"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="pkhbt"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="pkhtb"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="pop"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="push"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="rbit"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="rev16"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="revsh"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="rev"/>				
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="sbfx"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="sdiv"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="sel"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="sev"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="smc"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="ssat16"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="ssat"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="svc"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="swpb"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="swp"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="sys"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="teq"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="tst"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="ubfx"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="udiv"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="umaal"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="usad8"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="usada8"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="usat16"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="usat"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="wfe"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="wfi"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccInst" String="yield"/>
				

				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="setend"/>
				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="enterx"/>
				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="leavex"/>
				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="bkpt"/>
				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="cpsieid"/>
				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="cpsie"/>
				<StringDetect insensitive="true" attribute="Opcode" context="InstW"  String="cps"/>

				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW"  String="hblp"/>
				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW"  String="hbl"/>
				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW"  String="hbp"/>
				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW"  String="hb"/>

				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW" String="cbz"/>
				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW" String="cbnz"/>
				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW" String="tbh"/>
				<StringDetect insensitive="true" attribute="BranchOpcode" context="InstW" String="tbb"/>
				<RegExpr insensitive="true" attribute="BranchOpcode" context="InstW" String="b(lt|le|ls|lo)"/> <!-- ugly hack-->
				<RegExpr insensitive="true" attribute="BranchOpcode" context="ccInst" String="bl?x?|bxj"/>
				<RegExpr insensitive="true" attribute="BranchOpcode" context="ccInst" String="it[et]?[et]?[et]?\s+"/>
				
				
				

				<!-- VFPv3: instructions -->
				<StringDetect insensitive="true" attribute="Opcode" context="ccVldr"    String="vldr"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVldr"    String="vstr"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vmov"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vcmp"/>

				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vabs"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vneg"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vsqrt"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vadd"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vsub"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vdiv"/>				
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vmul"/>
				
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vmla"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vmls"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vfma"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vfms"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vnmul"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vnmla"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vnmls"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vfnma"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVop"     String="vfnms"/>
				
				<StringDetect insensitive="true" attribute="Opcode" context="ccVcvtr"   String="vcvtr"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVcvtb"   String="vcvtb"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVcvtb"   String="vcvtt"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVcvt"    String="vcvt"/>
				
				<StringDetect insensitive="true" attribute="Opcode" context="ccVInst"   String="vmrs"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVInst"   String="vmsr"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVInst"   String="vpush"/>
				<StringDetect insensitive="true" attribute="Opcode" context="ccVInst"   String="vpop"/>
				<StringDetect insensitive="true" attribute="Opcode" context="addrVInst" String="vldm"/>
				<StringDetect insensitive="true" attribute="Opcode" context="addrVInst" String="vstm"/>

			</context>


			

			<context attribute="Normal Text" fallthrough="true" fallthroughContext="ccInst" lineEndContext="#pop" name="addrInst">
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccInst" char="i" char1="a"/>
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccInst" char="i" char1="b"/>
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccInst" char="d" char1="a"/>
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccInst" char="d" char1="b"/>
			</context>
			<context attribute="Normal Text" fallthrough="true" fallthroughContext="ccInst" lineEndContext="#pop" name="SccInst">
				<DetectChar attribute="Opcode" context="ccInst" char="S"/>
			</context>
			<context attribute="Normal Text" fallthrough="true" fallthroughContext="InstW" lineEndContext="#pop" name="ccInst">
				<RegExpr insensitive="true" attribute="ccode" context="InstW" String="&conditioncode;"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="InstW">
				<DetectSpaces context="nomore"/>
				<WordDetect attribute="Opcode" context="nomore" String=".N"/>
				<WordDetect attribute="Opcode" context="nomore" String=".W"/>
			</context>

			<context attribute="Normal Text" fallthrough="true" fallthroughContext="ccVInst" lineEndContext="#pop" name="addrVInst">
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccVInst" char="i" char1="a"/>
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccVInst" char="i" char1="b"/>
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccVInst" char="d" char1="a"/>
				<Detect2Chars insensitive="true" attribute="Addrcode" context="ccVInst" char="d" char1="b"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="ccVInst">
				<DetectSpaces context="nomore"/>
				<RegExpr insensitive="true" attribute="ccode" context="nomore" String="&conditioncode;\b"/>
			</context>

			<context attribute="Normal Text" fallthrough="true" fallthroughContext="VopW" lineEndContext="#pop" name="ccVop">
				<RegExpr insensitive="true" attribute="ccode" context="VopW" String="&conditioncode;"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="VopW">
				<DetectSpaces context="nomore"/>
				<WordDetect attribute="Opcode" context="nomore" String=".f32"/>
				<WordDetect attribute="Opcode" context="nomore" String=".f64"/>
			</context>
			

			<context attribute="Normal Text" fallthrough="true" fallthroughContext="vldrW" lineEndContext="#pop" name="ccVldr">
				<RegExpr insensitive="true" attribute="ccode" context="vldrW" String="&conditioncode;"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="vldrW">
				<DetectSpaces context="nomore"/>
				<WordDetect attribute="Opcode" context="nomore" String=".f32"/>
				<WordDetect attribute="Opcode" context="nomore" String=".32"/>
				<WordDetect attribute="Opcode" context="nomore" String=".f64"/>
				<WordDetect attribute="Opcode" context="nomore" String=".64"/>
			</context>
			
			<context attribute="Normal Text" fallthrough="true" fallthroughContext="vcvtrW" lineEndContext="#pop" name="ccVcvtr">
				<RegExpr insensitive="true" attribute="ccode" context="vcvtrW" String="&conditioncode;"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="vcvtrW">
				<DetectSpaces context="nomore"/>
				<WordDetect attribute="Opcode" context="nomore" String=".u32.f32"/>
				<WordDetect attribute="Opcode" context="nomore" String=".u32.f64"/>
				<WordDetect attribute="Opcode" context="nomore" String=".s32.f32"/>
				<WordDetect attribute="Opcode" context="nomore" String=".s32.f64"/>
			</context>
			
			<context attribute="Normal Text" fallthrough="true" fallthroughContext="vcvtbW" lineEndContext="#pop" name="ccVcvtb">
				<RegExpr insensitive="true" attribute="ccode" context="vcvtbW" String="&conditioncode;"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="vcvtbW">
				<DetectSpaces context="nomore"/>
				<WordDetect attribute="Opcode" context="nomore" String=".f32.f16"/>
				<WordDetect attribute="Opcode" context="nomore" String=".f16.f32"/>
			</context>
			
			<context attribute="Normal Text" fallthrough="true" fallthroughContext="vcvtW" lineEndContext="#pop" name="ccVcvt">
				<RegExpr insensitive="true" attribute="ccode" context="vcvtW" String="&conditioncode;"/>
			</context>
			<context attribute="Normal Text" lineEndContext="#pop" name="vcvtW">
				<DetectSpaces context="nomore"/>

				<RegExpr attribute="Opcode" context="nomore" String="(\.f32\.f64|\.f64\.f32)\b"/>
				<RegExpr attribute="Opcode" context="nomore" String="((\.f32|\.f64)(\.u32|\.s32|\.u16|\.s16))\b"/>
				<RegExpr attribute="Opcode" context="nomore" String="((\.u32|\.s32|\.u16|\.s16)(\.f32|\.f64))\b"/>
			</context>
			



			
			<context attribute="Arguments" lineEndContext="#pop" name="nomore">
				<DetectChar attribute="Comment" context="Comment" char="@"/>
				<DetectChar attribute="String"   context="String" char="&quot;"/>
				<RegExpr attribute="Char" context="#stay" String="'(\\x[0-9a-fA-F][0-9a-fA-F]?|\\[0-7]?[0-7]?[0-7]?|\\.|.)'" />
				
				
				<RegExpr insensitive="true" attribute="coRegister"  context="#stay" String="c[0-7]\b"/>
				<RegExpr insensitive="true" attribute="coRegister"  context="#stay" String="p([0-9]|1[0-5])\b"/>
				<RegExpr insensitive="true" attribute="Register"    context="#stay" String="[rq]([0-9]|1[0-5])\b"/>
				<RegExpr insensitive="true" attribute="Register"    context="#stay" String="[sd]([0-9]|[12][0-9]|30|31)\b"/>
				<keyword                    attribute="Register"    context="#stay" String="registers"/>
				
				<keyword attribute="Opcode" context="#stay" String="op2shift"/>

				
				<RegExpr attribute="Float"	context="#stay" String="(0[efdEFD])?[+-]?[0-9]*\.[0-9]*[e]?[+-]?[0-9]+"/>
				<RegExpr attribute="Octal"	context="#stay" String="[$#]?0[0-7]+" />
				<RegExpr attribute="Hex"	context="#stay" String="[$#]?0x[0-9A-Fa-f]+"/>
				<RegExpr attribute="Binary"	context="#stay" String="[$#]?0[bB][01]+" />
				<RegExpr attribute="Decimal"	context="#stay" String="[$#]?-?[0-9]+" />				



				<AnyChar attribute="Normal Text" context="#stay" String="!#%*()+,-&lt;=&gt;?/:[]^{|}~" />				
				<RegExpr attribute="Normal Text" context="#stay" String="[A-Za-z_.$][A-Za-z0-9_.$]*" />
			</context>
			
			<context attribute="Comment" lineEndContext="#pop" name="Comment" >
				<IncludeRules context="##Alerts" />
			</context>
			
			
			
			<context attribute="String" lineEndContext="#pop" name="String">				
				<HlCStringChar attribute="String Char" context="#stay" />
				<DetectChar    attribute="String" context="#pop" char="&quot;" />
			</context>

		</contexts>


		<itemDatas>
			<itemData name="Normal Text"	defStyleNum="dsNormal"/>
			<itemData name="Arguments"	defStyleNum="dsNormal"/>
			<itemData name="Label"		defStyleNum="dsKeyword"/>
			<itemData name="Keyword"	defStyleNum="dsKeyword"/>
			
			<itemData name="BranchOpcode"	defStyleNum="dsNormal" color="#8d38c9"/>
			<itemData name="ccode"		defStyleNum="dsNormal" color="#8d38c9"/>
			<itemData name="Addrcode"	defStyleNum="dsNormal" color="#357ec7"/>
			<itemData name="Opcode"		defStyleNum="dsNormal" color="#0000ff"/>
			<itemData name="widthtype"	defStyleNum="dsNormal" color="#0000ff"/>
			<itemData name="Register"	defStyleNum="dsNormal" color="#ff7f00"/>
			<itemData name="coRegister"	defStyleNum="dsNormal" color="#eb9100"/>

			<itemData name="Float"		defStyleNum="dsFloat"/>
			<itemData name="Decimal"	defStyleNum="dsDecVal"/>
			<itemData name="Octal"		defStyleNum="dsBaseN"/>
			<itemData name="Hex"		defStyleNum="dsBaseN"/>
			<itemData name="Binary"		defStyleNum="dsBaseN" />

			
			<itemData name="Char"		defStyleNum="dsChar"/>
			<itemData name="String"		defStyleNum="dsString"/>
			<itemData name="String Char"	defStyleNum="dsChar"/>
			
			<itemData name="Comment"	defStyleNum="dsComment"/>
		</itemDatas>
	</highlighting>

	<general>
		<comments>
			<comment name="singleLine" start="@"/>
		</comments>
		<keywords casesensitive="0" weakDeliminator="_.$" />
	</general>
</language>
