Skip to content

Instantly share code, notes, and snippets.

@wallneradam
Last active May 13, 2018 16:00
Show Gist options
  • Save wallneradam/94f912a016975df9a978b94a4b4d6079 to your computer and use it in GitHub Desktop.
Save wallneradam/94f912a016975df9a978b94a4b4d6079 to your computer and use it in GitHub Desktop.
Broadcom QPU assembler language specification file for GtkSourceView (gedit)
<?xml version="1.0" encoding="UTF-8"?>
<language id="qasm" _name="Assembler (Broadcom QPU)" version="2.0" _section="Sources">
<metadata>
<property name="mimetypes">text/x-qasm;application/x-qinc</property>
<property name="globs">*.qasm;*.qinc</property>
<property name="line-comment-start">#</property>
</metadata>
<styles>
<style id="comment" _name="Comment" map-to="def:comment" />
<style id="keyword" _name="Keyword" map-to="def:keyword" />
<style id="operator" _name="Operator" map-to="def:operator" />
<style id="register" _name="Register" map-to="def:type" />
<style id="directive" _name="Directive" map-to="def:identifier" />
<style id="macro" _name="Macro" map-to="def:preprocessor" />
<style id="string" _name="String" map-to="def:string"/>
<style id="label" _name="Label" map-to="def:identifier" />
<style id="float" _name="Floating Point" map-to="def:floating-point" />
<style id="decimal" _name="Decimal" map-to="def:decimal" />
<style id="number" _name="Number" map-to="def:number" />
<style id="alu-separator" _name="ALU Separator" map-to="def:special-char" />
<style id="modifier" _name="Modifier" map-to="def:keyword" />
<style id="pack-unpack" _name="Pack-Unpack" map-to="def:type" />
</styles>
<definitions>
<context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
<start>#</start>
</context>
<context id="instructions" style-ref="keyword">
<keyword>add</keyword>
<keyword>sub</keyword>
<keyword>min</keyword>
<keyword>max</keyword>
<keyword>and</keyword>
<keyword>or</keyword>
<keyword>xor</keyword>
<keyword>shl</keyword>
<keyword>shr</keyword>
<keyword>asr</keyword>
<keyword>ror</keyword>
<keyword>not</keyword>
<keyword>clz</keyword>
<keyword>mul24</keyword>
<keyword>fadd</keyword>
<keyword>fsub</keyword>
<keyword>fmin</keyword>
<keyword>fmax</keyword>
<keyword>fminabs</keyword>
<keyword>fmaxabs</keyword>
<keyword>fmul</keyword>
<keyword>itof</keyword>
<keyword>ftoi</keyword>
<keyword>v8adds</keyword>
<keyword>v8subs</keyword>
<keyword>v8min</keyword>
<keyword>v8max</keyword>
<keyword>v8muld</keyword>
<keyword>mov</keyword>
<keyword>ldi</keyword>
<keyword>nop</keyword>
<keyword>anop</keyword>
<keyword>mnop</keyword>
<keyword>read</keyword>
<keyword>sacq</keyword>
<keyword>srel</keyword>
<keyword>bra</keyword>
<keyword>brr</keyword>
<keyword>bra</keyword>
<keyword>bkpt</keyword>
<keyword>thrsw</keyword>
<keyword>thrend</keyword>
<keyword>sbwait</keyword>
<keyword>sbdone</keyword>
<keyword>lthrsw</keyword>
<keyword>loadcv</keyword>
<keyword>loadc</keyword>
<keyword>ldcend</keyword>
<keyword>ldtmu0</keyword>
<keyword>ldtmu1</keyword>
<keyword>loadam</keyword>
</context>
<context id="instruction-modifiers" style-ref="modifier">
<prefix>[.]</prefix>
<keyword>setf</keyword>
<keyword>sf</keyword>
<keyword>ifnz</keyword>
<keyword>nz</keyword>
<keyword>ifzc</keyword>
<keyword>zc</keyword>
<keyword>ifz</keyword>
<keyword>z</keyword>
<keyword>ifzs</keyword>
<keyword>zs</keyword>
<keyword>ifnn</keyword>
<keyword>nn</keyword>
<keyword>ifnc</keyword>
<keyword>nc</keyword>
<keyword>ifn</keyword>
<keyword>n</keyword>
<keyword>ifns</keyword>
<keyword>ns</keyword>
<keyword>ifcc</keyword>
<keyword>cc</keyword>
<keyword>ifc</keyword>
<keyword>c</keyword>
<keyword>ifcs</keyword>
<keyword>cs</keyword>
<keyword>allz</keyword>
<keyword>alln</keyword>
<keyword>allc</keyword>
<keyword>allnz</keyword>
<keyword>allnn</keyword>
<keyword>allnc</keyword>
<keyword>anyz</keyword>
<keyword>anyn</keyword>
<keyword>anyc</keyword>
<keyword>anynz</keyword>
<keyword>anynn</keyword>
<keyword>anync</keyword>
</context>
<context id="instruction-pack" style-ref="pack-unpack">
<prefix>[.]pack</prefix>
<keyword>32</keyword>
<keyword>32s</keyword>
<keyword>32si</keyword>
<keyword>16a</keyword>
<keyword>16ai</keyword>
<keyword>16af</keyword>
<keyword>16as</keyword>
<keyword>16asi</keyword>
<keyword>16b</keyword>
<keyword>16bi</keyword>
<keyword>16bf</keyword>
<keyword>16bs</keyword>
<keyword>16bsi</keyword>
<keyword>8888</keyword>
<keyword>8abcd</keyword>
<keyword>8888i</keyword>
<keyword>8abcdi</keyword>
<keyword>8888s</keyword>
<keyword>8abcds</keyword>
<keyword>8888si</keyword>
<keyword>8abcdsi</keyword>
<keyword>8888sf</keyword>
<keyword>8abcdsf</keyword>
<keyword>8a</keyword>
<keyword>8ai</keyword>
<keyword>8af</keyword>
<keyword>8as</keyword>
<keyword>8asi</keyword>
<keyword>8asf</keyword>
<keyword>8b</keyword>
<keyword>8bi</keyword>
<keyword>8bf</keyword>
<keyword>8bs</keyword>
<keyword>8bsi</keyword>
<keyword>8bsf</keyword>
<keyword>8c</keyword>
<keyword>8ci</keyword>
<keyword>8cf</keyword>
<keyword>8cs</keyword>
<keyword>8csi</keyword>
<keyword>8csf</keyword>
<keyword>8d</keyword>
<keyword>8di</keyword>
<keyword>8df</keyword>
<keyword>8ds</keyword>
<keyword>8dsi</keyword>
<keyword>8dsf</keyword>
<keyword>8dr</keyword>
</context>
<context id="instruction-unpack" style-ref="pack-unpack">
<prefix>[.]unpack</prefix>
<keyword>32</keyword>
<keyword>32s</keyword>
<keyword>32si</keyword>
<keyword>16a</keyword>
<keyword>16ai</keyword>
<keyword>16af</keyword>
<keyword>16as</keyword>
<keyword>16asi</keyword>
<keyword>16b</keyword>
<keyword>16bi</keyword>
<keyword>16bf</keyword>
<keyword>16bs</keyword>
<keyword>16bsi</keyword>
<keyword>8888</keyword>
<keyword>8abcd</keyword>
<keyword>8888i</keyword>
<keyword>8abcdi</keyword>
<keyword>8888s</keyword>
<keyword>8abcds</keyword>
<keyword>8888si</keyword>
<keyword>8abcdsi</keyword>
<keyword>8888sf</keyword>
<keyword>8abcdsf</keyword>
<keyword>8a</keyword>
<keyword>8ai</keyword>
<keyword>8af</keyword>
<keyword>8as</keyword>
<keyword>8asi</keyword>
<keyword>8asf</keyword>
<keyword>8b</keyword>
<keyword>8bi</keyword>
<keyword>8bf</keyword>
<keyword>8bs</keyword>
<keyword>8bsi</keyword>
<keyword>8bsf</keyword>
<keyword>8c</keyword>
<keyword>8ci</keyword>
<keyword>8cf</keyword>
<keyword>8cs</keyword>
<keyword>8csi</keyword>
<keyword>8csf</keyword>
<keyword>8d</keyword>
<keyword>8di</keyword>
<keyword>8df</keyword>
<keyword>8ds</keyword>
<keyword>8dsi</keyword>
<keyword>8dsf</keyword>
<keyword>8dr</keyword>
</context>
<context id="instruction-pack-dst-unpack-src" style-ref="pack-unpack">
<prefix>[.]</prefix>
<keyword>32</keyword>
<keyword>32s</keyword>
<keyword>32si</keyword>
<keyword>16a</keyword>
<keyword>16ai</keyword>
<keyword>16af</keyword>
<keyword>16as</keyword>
<keyword>16asi</keyword>
<keyword>16b</keyword>
<keyword>16bi</keyword>
<keyword>16bf</keyword>
<keyword>16bs</keyword>
<keyword>16bsi</keyword>
<keyword>8888</keyword>
<keyword>8abcd</keyword>
<keyword>8888i</keyword>
<keyword>8abcdi</keyword>
<keyword>8888s</keyword>
<keyword>8abcds</keyword>
<keyword>8888si</keyword>
<keyword>8abcdsi</keyword>
<keyword>8888sf</keyword>
<keyword>8abcdsf</keyword>
<keyword>8a</keyword>
<keyword>8ai</keyword>
<keyword>8af</keyword>
<keyword>8as</keyword>
<keyword>8asi</keyword>
<keyword>8asf</keyword>
<keyword>8b</keyword>
<keyword>8bi</keyword>
<keyword>8bf</keyword>
<keyword>8bs</keyword>
<keyword>8bsi</keyword>
<keyword>8bsf</keyword>
<keyword>8c</keyword>
<keyword>8ci</keyword>
<keyword>8cf</keyword>
<keyword>8cs</keyword>
<keyword>8csi</keyword>
<keyword>8csf</keyword>
<keyword>8d</keyword>
<keyword>8di</keyword>
<keyword>8df</keyword>
<keyword>8ds</keyword>
<keyword>8dsi</keyword>
<keyword>8dsf</keyword>
<keyword>8dr</keyword>
</context>
<context id="single-operators" style-ref="operator" extend-parent="false">
<match>(?:\b|\s|\(|\)|,)(?:[\(\)+\-~!*/%&gt;&lt;&amp;\^|]|&lt;&lt;|&gt;&gt;|&lt;&lt;|&gt;&gt;|&lt;&lt;&lt;|&gt;&gt;&gt;|&gt;&lt;&lt;|&gt;&gt;&lt;|&gt;&lt;&lt;&lt;|&gt;&gt;&gt;&lt;|&gt;=|&lt;=|&lt;=&gt;|\&#42;\&#42;|!\&#94;|&amp;&amp;|\&#94;\&#94;|!\&#94;\&#94;|\&#124;\&#124;){1}(?:\b|\s|\(|\))</match>
</context>
<context id="keyword-operators" style-ref="operator">
<keyword>abs</keyword>
<keyword>ceil</keyword>
<keyword>floor</keyword>
<keyword>exp2</keyword>
<keyword>exp10</keyword>
<keyword>exp</keyword>
<keyword>log2</keyword>
<keyword>log10</keyword>
<keyword>log</keyword>
<keyword>cos</keyword>
<keyword>sin</keyword>
<keyword>tan</keyword>
<keyword>acos</keyword>
<keyword>asin</keyword>
<keyword>atan</keyword>
<keyword>cosh</keyword>
<keyword>sinh</keyword>
<keyword>tanh</keyword>
<keyword>acosh</keyword>
<keyword>asinh</keyword>
<keyword>atanh</keyword>
<keyword>erfc</keyword>
<keyword>erf</keyword>
</context>
<context id="registers" style-ref="register">
<keyword>unif</keyword>
<keyword>vary</keyword>
<keyword>r0</keyword>
<keyword>r1</keyword>
<keyword>r2</keyword>
<keyword>r3</keyword>
<keyword>r4</keyword>
<keyword>r5</keyword>
<keyword>tmurs</keyword>
<keyword>r5quad</keyword>
<keyword>r5rep</keyword>
<keyword>elem_num</keyword>
<keyword>qpu_num</keyword>
<keyword>irq</keyword>
<keyword>interrupt</keyword>
<keyword>unif_addr</keyword>
<keyword>unif_addr_rel</keyword>
<keyword>x_coord</keyword>
<keyword>y_coord</keyword>
<keyword>ms_mask</keyword>
<keyword>rev_flag</keyword>
<keyword>stencil</keyword>
<keyword>tlbz</keyword>
<keyword>tlbm</keyword>
<keyword>tlbc</keyword>
<keyword>tlbam</keyword>
<keyword>vpm</keyword>
<keyword>vr_busy</keyword>
<keyword>vw_busy</keyword>
<keyword>vr_setup</keyword>
<keyword>vw_setup</keyword>
<keyword>vr_wait</keyword>
<keyword>vw_wait</keyword>
<keyword>vr_addr</keyword>
<keyword>vw_addr</keyword>
<keyword>mutex</keyword>
<keyword>mutex_acq</keyword>
<keyword>mutex_rel</keyword>
<keyword>recip</keyword>
<keyword>recipqstr</keyword>
<keyword>exp</keyword>
<keyword>t0s</keyword>
<keyword>t0t</keyword>
<keyword>t0r</keyword>
<keyword>t0b</keyword>
<keyword>t1s</keyword>
<keyword>t1t</keyword>
<keyword>t1r</keyword>
<keyword>t1b</keyword>
<keyword>ra1</keyword>
<keyword>ra2</keyword>
<keyword>ra3</keyword>
<keyword>ra4</keyword>
<keyword>ra5</keyword>
<keyword>ra6</keyword>
<keyword>ra7</keyword>
<keyword>ra8</keyword>
<keyword>ra9</keyword>
<keyword>ra10</keyword>
<keyword>ra11</keyword>
<keyword>ra12</keyword>
<keyword>ra13</keyword>
<keyword>ra14</keyword>
<keyword>ra15</keyword>
<keyword>ra16</keyword>
<keyword>ra17</keyword>
<keyword>ra18</keyword>
<keyword>ra19</keyword>
<keyword>ra20</keyword>
<keyword>ra21</keyword>
<keyword>ra22</keyword>
<keyword>ra23</keyword>
<keyword>ra24</keyword>
<keyword>ra25</keyword>
<keyword>ra26</keyword>
<keyword>ra27</keyword>
<keyword>ra28</keyword>
<keyword>ra29</keyword>
<keyword>ra30</keyword>
<keyword>ra31</keyword>
<keyword>ra32</keyword>
<keyword>ra33</keyword>
<keyword>ra34</keyword>
<keyword>ra25</keyword>
<keyword>ra36</keyword>
<keyword>ra37</keyword>
<keyword>ra38</keyword>
<keyword>ra39</keyword>
<keyword>ra40</keyword>
<keyword>ra41</keyword>
<keyword>ra42</keyword>
<keyword>ra43</keyword>
<keyword>ra44</keyword>
<keyword>ra45</keyword>
<keyword>ra46</keyword>
<keyword>ra47</keyword>
<keyword>ra48</keyword>
<keyword>ra49</keyword>
<keyword>ra50</keyword>
<keyword>ra51</keyword>
<keyword>ra52</keyword>
<keyword>ra53</keyword>
<keyword>ra54</keyword>
<keyword>ra55</keyword>
<keyword>ra56</keyword>
<keyword>ra57</keyword>
<keyword>ra58</keyword>
<keyword>ra59</keyword>
<keyword>ra60</keyword>
<keyword>ra61</keyword>
<keyword>ra62</keyword>
<keyword>ra63</keyword>
<keyword>rb1</keyword>
<keyword>rb2</keyword>
<keyword>rb3</keyword>
<keyword>rb4</keyword>
<keyword>rb5</keyword>
<keyword>rb6</keyword>
<keyword>rb7</keyword>
<keyword>rb8</keyword>
<keyword>rb9</keyword>
<keyword>rb10</keyword>
<keyword>rb11</keyword>
<keyword>rb12</keyword>
<keyword>rb13</keyword>
<keyword>rb14</keyword>
<keyword>rb15</keyword>
<keyword>rb16</keyword>
<keyword>rb17</keyword>
<keyword>rb18</keyword>
<keyword>rb19</keyword>
<keyword>rb20</keyword>
<keyword>rb21</keyword>
<keyword>rb22</keyword>
<keyword>rb23</keyword>
<keyword>rb24</keyword>
<keyword>rb25</keyword>
<keyword>rb26</keyword>
<keyword>rb27</keyword>
<keyword>rb28</keyword>
<keyword>rb29</keyword>
<keyword>rb30</keyword>
<keyword>rb31</keyword>
<keyword>rb32</keyword>
<keyword>rb33</keyword>
<keyword>rb34</keyword>
<keyword>rb25</keyword>
<keyword>rb36</keyword>
<keyword>rb37</keyword>
<keyword>rb38</keyword>
<keyword>rb39</keyword>
<keyword>rb40</keyword>
<keyword>rb41</keyword>
<keyword>rb42</keyword>
<keyword>rb43</keyword>
<keyword>rb44</keyword>
<keyword>rb45</keyword>
<keyword>rb46</keyword>
<keyword>rb47</keyword>
<keyword>rb48</keyword>
<keyword>rb49</keyword>
<keyword>rb50</keyword>
<keyword>rb51</keyword>
<keyword>rb52</keyword>
<keyword>rb53</keyword>
<keyword>rb54</keyword>
<keyword>rb55</keyword>
<keyword>rb56</keyword>
<keyword>rb57</keyword>
<keyword>rb58</keyword>
<keyword>rb59</keyword>
<keyword>rb60</keyword>
<keyword>rb61</keyword>
<keyword>rb62</keyword>
<keyword>rb63</keyword>
</context>
<context id="directives" style-ref="directive">
<prefix>[.]</prefix>
<keyword>const</keyword>
<keyword>set</keyword>
<keyword>lconst</keyword>
<keyword>lset</keyword>
<keyword>unset</keyword>
<keyword>lunset</keyword>
<keyword>local</keyword>
<keyword>endloc</keyword>
<keyword>func</keyword>
<keyword>endf</keyword>
<keyword>macro</keyword>
<keyword>endm</keyword>
<keyword>rep</keyword>
<keyword>endr</keyword>
<keyword>foreach</keyword>
<keyword>endfor</keyword>
<keyword>back</keyword>
<keyword>endb</keyword>
<keyword>clone</keyword>
<keyword>if</keyword>
<keyword>elseif</keyword>
<keyword>else</keyword>
<keyword>endif</keyword>
<keyword>ifset</keyword>
<keyword>assert</keyword>
<keyword>byte</keyword>
<keyword>short</keyword>
<keyword>int</keyword>
<keyword>long</keyword>
<keyword>bit</keyword>
<keyword>float</keyword>
<keyword>half</keyword>
<keyword>double</keyword>
<keyword>align</keyword>
<keyword>global</keyword>
<keyword>code</keyword>
<keyword>rodata</keyword>
<keyword>text</keyword>
</context>
<context id="macros" style-ref="macro">
<keyword>vdr_setup_0</keyword>
<keyword>vdr_setup_1</keyword>
<keyword>vdr_h32</keyword>
<keyword>vdr_v32</keyword>
<keyword>vdw_setup_0</keyword>
<keyword>vdw_setup_1</keyword>
<keyword>dma_h32</keyword>
<keyword>dma_h16p</keyword>
<keyword>dma_h8p</keyword>
<keyword>dma_v32</keyword>
<keyword>dma_v16p</keyword>
<keyword>dma_v8p</keyword>
<keyword>vpm_setup</keyword>
<keyword>h32</keyword>
<keyword>h16p</keyword>
<keyword>h16l</keyword>
<keyword>h8p</keyword>
<keyword>h8l</keyword>
<keyword>v32</keyword>
<keyword>v16p</keyword>
<keyword>v16l</keyword>
<keyword>v8p</keyword>
<keyword>v8l</keyword>
<keyword>min</keyword>
<keyword>max</keyword>
<keyword>ilog2</keyword>
<keyword>countBits</keyword>
<keyword>reverseBits4</keyword>
<keyword>reverseBits8</keyword>
<keyword>reverseBits16</keyword>
<keyword>reverseBits32</keyword>
<keyword>reverseBits64</keyword>
<keyword>reverseBits</keyword>
<keyword>sacq</keyword>
<keyword>srel</keyword>
<keyword>isConstant</keyword>
<keyword>isLdPE</keyword>
<keyword>isLdPES</keyword>
<keyword>isLdPEU</keyword>
<keyword>isRegister</keyword>
<keyword>isRegfileA</keyword>
<keyword>isRegfileB</keyword>
<keyword>isAccu</keyword>
<keyword>isReadable</keyword>
<keyword>isWritable</keyword>
<keyword>isRotate</keyword>
<keyword>isSemaphore</keyword>
<keyword>isLabel</keyword>
<keyword>isSmallImmd</keyword>
<keyword>M_E</keyword>
<keyword>M_LOG2E</keyword>
<keyword>M_LOG10E</keyword>
<keyword>M_LN2</keyword>
<keyword>M_LN10</keyword>
<keyword>M_PI</keyword>
<keyword>M_2PI</keyword>
<keyword>M_PI_2</keyword>
<keyword>M_PI_4</keyword>
<keyword>M_1_PI</keyword>
<keyword>M_2_PI</keyword>
<keyword>M_2_SQRTPI</keyword>
<keyword>M_SQRT2</keyword>
<keyword>M_SQRT1_2</keyword>
<keyword>M_NAN</keyword>
<keyword>M_INF</keyword>
</context>
<context id="label" style-ref="label">
<match>^\s*\:(?:[A-Za-z_][A-Za-z_0-9]*|\d+)\b</match>
</context>
<context id="relative-address" style-ref="label">
<start>r(?=\:)</start>
<end>(?=\s|$)</end>
<include>
<context sub-pattern="0" style-ref="modifier" where="start" />
</include>
</context>
<context id="decimal" style-ref="decimal">
<match>\b-?(?:[1-9][0-9]*|0)\b</match>
</context>
<context id="hexadecimal" style-ref="number">
<match>\b-?0x[0-9a-fA-F]+\b</match>
</context>
<context id="octal" style-ref="number">
<match>\b-?0[0-7]+\b</match>
</context>
<context id="binary" style-ref="number">
<match>\b-?0b[01]+\b</match>
</context>
<context id="float" style-ref="float">
<match>\b-?(?:[1-9][0-9]*|0)(?:\.[0-9]+)?(?:[eE][+\-]?[0-9]+)?\b</match>
</context>
<context id="alu-separator" style-ref="alu-separator">
<match>;</match>
</context>
<context id="include" extend-parent="true" end-at-line-end="true" >
<start>[.]include</start>
<end>["&lt;][^&gt;"]+["&gt;]</end>
<include>
<context sub-pattern="0" style-ref="directive" where="start" />
<context sub-pattern="0" style-ref="string" where="end" />
</include>
</context>
<context id="qasm" class="no-spell-check">
<include>
<context ref="line-comment" />
<context ref="include" />
<context ref="instructions" />
<context ref="instruction-modifiers" />
<context ref="instruction-pack" />
<context ref="instruction-unpack" />
<context ref="instruction-pack-dst-unpack-src" />
<context ref="single-operators" />
<context ref="keyword-operators" />
<context ref="registers" />
<context ref="directives" />
<context ref="macros" />
<context ref="label" />
<context ref="relative-address" />
<context ref="decimal" />
<context ref="hexadecimal" />
<context ref="octal" />
<context ref="binary" />
<context ref="float" />
<context ref="alu-separator" />
</include>
</context>
</definitions>
</language>
@wallneradam
Copy link
Author

Install

Put qasm.lang file into /usr/local/share/gtksourceview-3.0/language-specs (or 2.0, it should work with that as well) for everyone,
or ~/.local/share/gtksourceview-3.0/language-specs for only your user, and all applications using GtkSourceView (e.g. gedit)
will have syntax highlight for *.qasm and *.qinc files.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment