<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Motorola DSP 56367 processor, with the latest version of ADML,2006-->

<architecture name="m56k" version="0.1a">

<!--  <nop_instruction> -->
<!--  <implicit_nops>YES</implicit_nops>-->
<!--  </nop_instruction>-->
  <nop_instruction>NOP </nop_instruction>
  <implicit_nops>YES</implicit_nops>


 <omega>1</omega>
   <funits>
    <fu id = "ALU" occupation = "1" latency = "1"/>
    <fu id = "AGU" occupation = "1" latency = "1"/>
   </funits>

   <resources>
    <resource id = "execute"/>
   </resources>

   <remove>
     <op id = "CVFF4"/>
     <op id = "CVIU4"/>
     <op id = "CVFI4"/>
     <op id = "CVIF4"/>
     <op id = "CVII4"/>
     <op id = "CVIU4"/>
     <op id = "CVPU4"/>
     <op id = "CVUI4"/>
     <op id = "CVUU4"/>
     <op id = "CVUP4"/>
   </remove>

 <registers>
     <reg id = "SSH" size = "24"/> 
     <reg id = "SSL" size = "24"/> 
     <reg id = "a" size = "56"/>
     <reg id = "b" size = "56"/> 
  <!--   <reg id = "a2" size = "8"/> -->
  <!--   <reg id = "b0" size = "24"/>--> 
     <reg id = "b1" size = "24"/> 
  <!--   <reg id = "b2" size = "8"/> -->
  <!--   <reg id = "X0" size = "24"/>-->
  <!--   <reg id = "X1" size = "24"/>-->
     <reg id = "Y0" size = "24"/>
     <reg id = "Y1" size = "24"/>
     <reg id = "SR" size = "24"/>
        <aliases>
         <alias id = "CCR" src = "SR">
           <bits>
            <start>0</start>
            <end>7</end>
           </bits>
         </alias>
         <alias id = "MR" src ="SR">
            <bits>
            <start>8</start>
            <end>15</end>
           </bits>
         </alias>
          <alias id = "EMR" src ="SR">
            <bits>
            <start>16</start>
            <end>23</end>
           </bits>
          </alias>
       </aliases> 
       <reg id = "a" size = "56"/>
        <aliases>
         <alias id = "a0" src = "a">
           <bits>
            <start>0</start>
            <end>23</end>
           </bits>
         </alias>
         <alias id = "a1" src ="a">
            <bits>
            <start>24</start>
            <end>47</end>
           </bits>
         </alias>
          <alias id = "a2" src ="a">
            <bits>
            <start>48</start>
            <end>56</end>
           </bits>
          </alias>
       </aliases> 
       <reg id = "b" size = "56"/>
        <aliases>
         <alias id = "b0" src = "b">
           <bits>
            <start>0</start>
            <end>23</end>
           </bits>
         </alias>
         <alias id = "b1" src ="b">
            <bits>
            <start>24</start>
            <end>47</end>
           </bits>
         </alias>
          <alias id = "b2" src ="b">
            <bits>
            <start>48</start>
            <end>56</end>
           </bits>
          </alias>
       </aliases> 
     <reg id = "X0" size = "24"/> 
     <reg id = "X1" size = "24"/> 
     <reg id = "Y0" size = "24"/> 
     <reg id = "Y1" size = "24"/> 
     <reg id = "R0" size = "24"/> 
     <reg id = "R1" size = "24"/>
     <reg id = "R2" size = "24"/>
     <reg id = "R3" size = "24"/>
     <reg id = "R4" size = "24"/>
     <reg id = "R5" size = "24"/>
     <reg id = "R6" size = "24"/>
     <reg id = "R7" size = "24"/>
 <!-- over are dataregister-->
     <reg id = "N0" size = "24"/>
     <reg id = "N1" size = "24"/>
     <reg id = "N2" size = "24"/>
     <reg id = "N3" size = "24"/>
     <reg id = "N4" size = "24"/>
     <reg id = "N5" size = "24"/>
     <reg id = "N6" size = "24"/>
     <reg id = "N7" size = "24"/>
     <reg id = "M0" size = "24"/>
     <reg id = "M1" size = "24"/>
     <reg id = "M2" size = "24"/>
     <reg id = "M3" size = "24"/>
     <reg id = "M4" size = "24"/>
     <reg id = "M5" size = "24"/>
     <reg id = "M6" size = "24"/>
     <reg id = "M7" size = "24"/>

     <reg id = "COM" size = "8"/> 
     <reg id = "MR" size = "8"/>
     <reg id = "EOM" size = "8"/> 
     <reg id = "CCR" size = "8"/>
  <!-- they are adressregister -->
     <reg id = "SP" size = "24"/>
 </registers>

 <residences>
  <residence id = "accum">
  <!-- <reg id = "a"/> -->   
  <!-- <reg id = "a0"/>  -->

   <reg id = "a"/> 

 <reg id = "b"/> 
   <!--reg id = "a2"/-->
   <!--<reg id = "b"/>-->
<!--   <reg id = "b0"/>  -->
 
  <!--<reg id = "b0"/>   -->
   <!--reg id = "b2"/-->
  </residence>

  <residence id = "MemX">
   <reg id = "X0"/>
   <reg id = "X1"/>
  </residence>
  <residence id = "MemY">
   <reg id = "Y0"/>
   <reg id = "Y1"/>
  </residence>    

  <residence id = "Rn">
   <reg id = "R0"/>
   <reg id = "R1"/>
   <reg id = "R2"/>
   <reg id = "R3"/>
   <reg id = "R4"/>
   <reg id = "R5"/>
   <reg id = "R6"/>
   <reg id = "R7"/>
  </residence>
  <residence id = "Address">
   <reg id = "N0"/>
   <reg id = "N1"/>
   <reg id = "N2"/>
   <reg id = "N3"/>
<!--   <reg id = "M0"/>-->
<!--   <reg id = "M1"/>-->
<!--   <reg id = "M2"/>-->
<!--   <reg id = "M3"/>  -->
   <reg id = "N4"/>
   <reg id = "N5"/>
   <reg id = "N6"/>
   <reg id = "N7"/>
<!--   <reg id = "M4"/>-->
 <!--  <reg id = "M5"/>-->
 <!--  <reg id = "M6"/>-->
 <!--  <reg id = "M7"/>-->
  </residence>

  <residence id = "SS">
   <reg id = "SSH"/>
   <reg id = "SSL"/>
  </residence>
  
  <residence id = "Gsymbol"/>
  <residence id = "Constant"/>
  <residence id = "MR"/>
  <residence id = "PC">
   <reg id = "MR"/>
   <reg id = "CCR"/>
   <reg id = "COM"/>
   <reg id = "EOM"/>
  </residence>

</residences>

<instructionset>

<!--instruction set for memory A's case -->

 <instruction id = "ADDRFP4">
   <!-- <cycle_matrix execute = "2"/> -->
  <target id = ";givedata" dest1 = "Gsymbol"/>
 </instruction>

 <instruction id = "ADDRGP4">
   <!-- <cycle_matrix execute = "2"/> -->
  <target id = ";givedata" dest1 = "Gsymbol"/>
 </instruction>

 <instruction id = "ADDRLP4">
   <!-- <cycle_matrix execute = "2"/> -->
  <target id = ";givedata" dest1 = "Gsymbol"/>
 </instruction>

 <instruction id = "CNSTF4"> 
  <target id = ";load_value" dest1 = "Constant"/>
 </instruction>

<instruction id = "CNSTI4"> 
  <target id = ";load_value" dest1 = "Constant"/>
 </instruction>

<instruction id = "CNSTU4"> 
  <target id = ";load_value" dest1 = "Constant"/>
 </instruction>

<instruction id = "CNSTP4"> 
  <target id = ";load_value" dest1 = "Constant"/>
 </instruction>

 <instruction id = "ASGNF4">
  <target id = "assign" src1 = "Gsymbol"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:{src1}</format>
  </target>
  <target id = "assign" src1 = "Address"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "MemY">
   <cycle_matrix execute = "1"/>
  <format>move {src2},Y:({src1})</format>
  </target>
 </instruction>

 <instruction id = "ASGNI4">
  <target id = "assign1" src1 = "accum"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},{src1}</format>
  </target>
  <target id = "assign2" src1 = "Gsymbol"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:{src1}</format>
  </target>
  <target id = "assign3" src1 = "Address"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign4" src1 = "Rn"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign5" src1 = "Rn"  src2 = "MemY">
   <cycle_matrix execute = "1"/>
  <format>move {src2},Y:({src1})</format>
  </target>
 </instruction>

 <instruction id = "ASGNU4">
  <target id = "assign" src1 = "Gsymbol"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:{src1}</format>
  </target>
  <target id = "assign" src1 = "Address"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "MemY">
   <cycle_matrix execute = "1"/>
  <format>move {src2},Y:({src1})</format>
  </target>
 </instruction>

<instruction id = "ASGNP4">
  <target id = "assign" src1 = "Gsymbol"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:{src1}</format>
  </target>
  <target id = "assign" src1 = "Address"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "MemY">
   <cycle_matrix execute = "1"/>
  <format>move {src2},Y:({src1})</format>
  </target>
 </instruction>

<!--
 <instruction id = "ASGNB4">
  <target id = "assign" src1 = "Gsymbol"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},{src1}</format>
  </target>
  <target id = "assign" src1 = "Address"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "0"/>
  <format>move {src2},Y:({src1})</format>
  </target>
  <target id = "assign" src1 = "Rn"  src2 = "MemY">
   <cycle_matrix execute = "1"/>
  <format>move {src2},Y:({src1})</format>
  </target>
 </instruction>
-->

 <instruction id = "LABELV">
  <target id = "jump to somewhere" src = "Address">
   <format>L{LABELV.SYM0.NAME}</format>
  </target>
 </instruction>


<!-- particularlly for Accumulator -->


 <instruction id = "INDIRI4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "accum">
  <latency l = "1"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
  <target id = ";fetch_value" src1 = "accum" dest1 = "accum">
  <constraint dest1 = "src1"/>
<!--  <latency l = "1"/> -->
<!--   <cycle_matrix execute = "1"/> -->
<!--  <format>move Y:{src1},{dest1}</format> -->
  </target>
  <target id = "fetch_value" src1 = "Rn" dest1 = "accum">
   <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>move Y:({src1}),{dest1}</format>
  </target>
 </instruction>

 <instruction id = "INDIRU4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "accum">
  <latency l = "1"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
  <target id = "fetch_value" src1 = "Rn" dest1 = "accum">
   <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>move Y:({src1}),{dest1}</format>
  </target>
 </instruction>

 <instruction id = "INDIRP4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "accum">
  <latency l = "1"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
 </instruction>

<!--
 <instruction id = "INDIRB4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <format>move {src1},{dest1}</format>
  </target>
 </instruction>
-->

<!-- particularlly for Y-Memory -->

 <instruction id = "INDIRF4"> 

  <target id = "fetch_valuef1" src1 = "Gsymbol" dest1 = "MemY">
  <latency l = "0"/>
   <cycle_matrix execute = "2"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
  <target id = "fetch_valuef2" src1 = "Rn" dest1 = "accum">
  <latency l = "1"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:({src1}),{dest1}</format>
  </target>
  <target id = "fetch_valuef3" src1 = "Address" dest1 = "accum">
  <latency l = "1"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:({src1}),{dest1}</format>
  </target>
  <target id = "fetch_valuef4" src1 = "Rn" dest1 = "MemY">
  <latency l = "0"/>
   <cycle_matrix execute = "2"/>
  <format>move Y:({src1}),{dest1}</format>
  </target>
  <target id = "fetch_valuef5" src1 = "Gsymbol" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
  <target id = "fetch_valuef6" src1 = "Rn" dest1 = "accum">
   <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>move Y:({src1}),{dest1}</format>
  </target>
 </instruction>

 <instruction id = "INDIRI4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "MemY">
  <latency l = "0"/>
   <cycle_matrix execute = "2"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "INDIRU4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "MemY">
  <latency l = "0"/>
   <cycle_matrix execute = "2"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "INDIRP4"> 
  <target id = "fetch_valuep1" src1 = "Gsymbol" dest1 = "MemY">
  <latency l = "0"/>
   <cycle_matrix execute = "2"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
<!--  <target id = "fetch_valuep2" src1 = "Gsymbol" dest1 = "Address">-->
<!--   <latency l = "0"/>-->
<!--    <cycle_matrix execute = "2"/>-->
<!--   <format>move Y:{src1},{dest1}</format>-->
<!--   </target>-->
  <target id = "fetch_valuep3" src1 = "Gsymbol" dest1 = "Rn">
  <latency l = "3"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
 <target id = "fetch_valuep4" src1 = "accum" dest1 = "Rn">
  <latency l = "3"/>
   <cycle_matrix execute = "1"/>
  <format>move {src1},{dest1}</format>
  </target>
 <target id = "fetch_valuep5" src1 = "MemY" dest1 = "Rn">
  <latency l = "3"/>
   <cycle_matrix execute = "1"/>
  <format>move {src1},{dest1}</format>
  </target>
 <target id = "fetch_valuep6" src1 = "Rn" dest1 = "MemY">
  <latency l = "0"/>
   <cycle_matrix execute = "2"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
 <target id = "fetch_valuep7" src1 = "Rn" dest1 = "accum">
  <latency l = "1"/>
   <cycle_matrix execute = "1"/>
  <format>move Y:{src1},{dest1}</format>
  </target>
 </instruction>
<!--
 <instruction id = "INDIRB4"> 
  <target id = "fetch_value" src1 = "Gsymbol" dest1 = "MemY">
   <cycle_matrix execute = "2"/>
  <format>move {src1},{dest1}</format>
  </target>
 </instruction>


  <instruction id = "CVUI4">
      <target id = "CVUI4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVUU4">
      <target id = "CVUU4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVUP4">
      <target id = "CVUP4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVFF4">
      <target id = "CVFF4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVFI4">
      <target id = "CVFI4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVIF4">
      <target id = "CVIF4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVII4">
      <target id = "CVII4" src1 = "MemY" op1 = "MemY"/>
  </instruction>
  <instruction id = "CVIU4">
      <target id = "CVIU"  src1 = "MemY" dest1 = "MemY"/>
  </instruction>
  <instruction id = "CVPU4">
      <target id = "CVPU" src1 = "MemY" op1 = "MemY"/>
  </instruction>

  <instruction id = "CVFF4">
      <target id = "CVFF4" src1 = "accum" op1 = "accum"/>
  </instruction>
  <instruction id = "CVFI4">
      <target id = "CVFI4" src1 = "accum" op1 = "accum"/>
  </instruction>
  <instruction id = "CVIF4">
      <target id = "CVIF4" src1 = "accum" op1 = "accum"/>
  </instruction>
  <instruction id = "CVII4">
      <target id = "CVII4" src1 = "accum" op1 = "accum"/>
  </instruction>

 <instruction id = "CVIU4">
      <target id = "CVIU4" src1 = "accum" dest1 = "accum"/>
  </instruction>

  <instruction id = "CVPU4">
      <target id = "CVPU4" src1 = "accum" op1 = "accum"/>
  </instruction>
  <instruction id = "CVUI4">
      <target id = "CVUI4" src1 = "accum" op1 = "accum"/>
  </instruction>
  <instruction id = "CVUU4">
      <target id = "CVUU4" src1 = "accum" op1 = "accum"/>
  </instruction>
  <instruction id = "CVUP4">
      <target id = "CVUP4" src1 = "accum" op1 = "accum"/>
  </instruction>
-->
<!-- instructions in Motorola DSP 56367 processor -->
<!-- just for Y-Memory case -->

<!-- instruction ADD,source from Memory -->

 <instruction id = "ADDF4">
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>add {src1},{src2}</format>
   <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>add {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "ADDI4">
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>add {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "ADDU4">
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>add {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "ADDP4">
  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "accum" src2 = "MemY" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>add {src1},{src2}</format>
<!--  <constraint dest1 = "src2"/> -->
  </target>

  <target id = "add" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>add {src1},{src2}</format>
  <!-- <constraint dest1 = "src2"/> -->
  </target>
 </instruction>

<!-- instruction ADD,source from accumulator -->

<instruction id = "ADDF4">
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "ADDI4">
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "ADDU4">
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "ADDP4">
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "add" src1 = "accum" src2 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
  <format>add {src1},{src2}</format>
  </target>
  <target id = "add" src1 = "Rn" src2 = "Constant" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
  <format>add #{src2},Y:({src1})</format>
  </target>
 </instruction>

<!--               Instruction ADD with constant         -->

 <instruction id = "ADDF4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <format>add #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "ADDI4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <format>add #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "ADDU4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
<!--<condition> -->
<!--  <test><![CDATA[ Constant >= 63]]></test> -->
<!--</condition> -->
  <format>add #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "ADDP4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <!--<condition> -->
  <!--<test><![CDATA[ Constant >= 63]]></test> -->
  <!-- <condition> -->
  <format>add #{src2},{src1}</format>
 <constraint dest1 = "src1"/>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "2"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <!--<condition> -->
  <!--<test><![CDATA[ Constant >= 63]]></test> -->
  <!-- <condition> -->
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

<!--               Instruction ADD with constant         -->

 <instruction id = "ADDF4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
 <!--  <condition> -->
 <!--     <test><![CDATA[ Constant <= 63]]></test>-->
 <!--  </condition> -->
  <format>add #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
 <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
 <!--  <condition> -->
 <!--     <test><![CDATA[ Constant <= 63]]></test>-->
 <!--  </condition> -->
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "ADDI4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test> 
    </condition>
  <format>add #{src2},{src1}</format>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test> 
    </condition>
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "ADDU4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  <!--  <condition> -->
  <!--    <test><![CDATA[ Constant <= 63]]></test>-->
  <!--  </condition> -->
  <format>add #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  <!--  <condition> -->
  <!--    <test><![CDATA[ Constant <= 63]]></test>-->
  <!--  </condition> -->
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "ADDP4">
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
<!--    <condition> -->
    <!--  <test><![CDATA[ Constant <= 63]]></test>-->
<!--    </condition>-->
  <format>add #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "add" src2 = "Constant" src1 = "accum" dest1 = "Rn">
  <latency l = "0"/>
    <cycle_matrix execute = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
<!--    <condition> -->
    <!--  <test><![CDATA[ Constant <= 63]]></test>-->
<!--    </condition>-->
  <format>add #{src2},{src1}</format>
  </target>
 </instruction>



<!-- instruction SUB, source from Memory -->

 <instruction id = "SUBF4">
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "SUBI4">
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "SUBU4">
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "SUBP4">
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "MemY" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

<!--         instruction SUB, source from Accumulator        -->

 <instruction id = "SUBF4">
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "SUBI4">
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "SUBU4">
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "SUBP4">
  <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
 <target id = "sub" src1 = "accum" src2 = "accum" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
  <format>sub {src1},{src2}</format>
  </target>
 <target id = "sub" src1 = "Rn" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>sub #{src2},Y:({src1})</format>
  </target>
 </instruction>

<!--             Instruction for SUB, with constant                    -->


 <instruction id = "SUBF4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matri1 execute = "2"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant >= 63]]></test>-->
  <!--  </condition> -->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matri1 execute = "2"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant >= 63]]></test>-->
  <!--  </condition> -->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "SUBI4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
<!--    <condition> -->
    <!--  <test><![CDATA[ Constant >= 63]]></test>-->
<!--    </condition> -->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
<!--    <condition> -->
    <!--  <test><![CDATA[ Constant >= 63]]></test>-->
<!--    </condition> -->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "SUBU4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant >= 63]]></test>-->
  <!--  </condition>-->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant >= 63]]></test>-->
  <!--  </condition>-->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "SUBP4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
    <!--<condition> -->
    <!--  <test><![CDATA[ Constant >= 63]]></test>-->
<!--    </condition>-->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "2"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
    <!--<condition> -->
    <!--  <test><![CDATA[ Constant >= 63]]></test>-->
<!--    </condition>-->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

<!--             Instruction for SUB, with constant                    -->


 <instruction id = "SUBF4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "1"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant <= 63]]></test>-->
  <!--  </condition> -->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "1"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant <= 63]]></test>-->
  <!--  </condition> -->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "SUBI4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "1"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
<!--    <condition> -->
<!--      <test><![CDATA[ Constant <= 63]]></test> -->
<!--    </condition> -->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "1"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
<!--    <condition> -->
<!--      <test><![CDATA[ Constant <= 63]]></test> -->
<!--    </condition> -->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "SUBU4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "1"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
 <!--   <condition> -->
  <!--    <test><![CDATA[ Constant <= 63]]></test> -->
<!--    </condition>-->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "1"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
 <!--   <condition> -->
  <!--    <test><![CDATA[ Constant <= 63]]></test> -->
<!--    </condition>-->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>

 <instruction id = "SUBP4">
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "accum">
    <cycle_matrix execute = "1"/>
  <latency l = "1"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant <= 63]]></test>-->
  <!--  </condition>-->
  <format>sub #{src2},{src1}</format>
  <constraint dest1 = "src1"/>
  </target>
  <target id = "sub" src1 = "accum" src2 = "Constant" dest1 = "Rn">
    <cycle_matrix execute = "1"/>
  <latency l = "0"/>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  <!--  <condition>-->
  <!--    <test><![CDATA[ Constant <= 63]]></test>-->
  <!--  </condition>-->
  <format>sub #{src2},{src1}</format>
  </target>
 </instruction>



<!--          instruction multiplication            -->              

 <instruction id = "MULF4">
  <target id = "multiply" src1 = "MemY" src2 = "MemX" dest1 = "accum">
   <cycle_matrix execute = "2"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULI4">
  <target id = "multiply" src1 = "MemY" src2 = "MemX" dest1 = "accum">
   <cycle_matrix execute = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULU4">
  <target id = "multiply" src1 = "MemY" src2 = "MemX" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>


 <instruction id = "MULF4">
  <target id = "multiply" src1 = "MemY" src2 = "MemY" dest1 = "accum">
   <cycle_matrix execute = "1"/>
   <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULI4">
  <target id = "multiply" src1 = "MemY" src2 = "MemY" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULU4">
  <target id = "multiply" src1 = "MemY" src2 = "MemY" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULF4">
  <target id = "multiply" src1 = "MemX" src2 = "MemX" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULI4">
  <target id = "multiply" src1 = "MemX" src2 = "MemX" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

 <instruction id = "MULU4">
  <target id = "multiply" src1 = "MemX" src2 = "MemX" dest1 = "accum">
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
   <format>mpy {src1},{src2},{dest1}</format>
  </target>
 </instruction>

<!--                  instruction DIV                              -->

 <instruction id = "DIVF4">
  <target id = "multiply" src1 = "MemY" src2 = "accum" dest1 = "accum">
   <cycle_matrix execute = "1"/>
 <latency l = "1"/>
   <format>div {src1},{src2}</format>
   <constraint dest1 = "src2"/>
  </target>
 </instruction>

 <instruction id = "DIVI4">
  <target id = "multiply" src1 = "MemY" src2 = "accum" dest1 = "accum">
   <cycle_matrix execute = "1"/>
   <latency l = "1"/>
   <format>div {src1},{src2}</format>
   <constraint dest1 = "src2"/>
  </target>
 </instruction>

 <instruction id = "DIVU4">
  <target id = "multiply" src1 = "MemY" src2 = "accum" dest1 = "accum">
   <cycle_matrix execute = "1"/>
   <latency l = "1"/>
   <format>div {src1},{src2}</format>
   <constraint dest1 = "src2"/>
  </target>
 </instruction>

<!--              Instruction LSH, source from Memory                 -->

 <instruction id = "LSHI4">
  <target id = "left_shift" src1 = "accum" src2 = "MemY" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsl {src2},{src1}</format>
 <!-- <constraint dest1 = "src2"/>-->
  </target>
 </instruction>

 <instruction id = "LSHU4">
  <target id = "left_shift" src1 = "accum" src2 = "MemY" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsl {src2},{src1}</format>
 <!--  <constraint dest1 = "src2"/>-->
  </target>
 </instruction>

<!--         LSH, with source from Accumulator (a1,b1)          -->

 <instruction id = "LSHI4">
  <target id = "left_shift" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsl {src1}1,{src2}</format>
 <!--  <constraint dest1 = "src2"/>-->
  </target>
 </instruction> 

 <instruction id = "LSHU4">
  <target id = "left_shift" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsl {src1}1,{src2}</format>
  <!-- <constraint dest1 = "src2"/>-->
  </target>
 </instruction>

<!--         LSH, with a constant                        -->

 <instruction id = "LSHI4">
  <target id = "left_shift" src1 = "Constant" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsl #{src1},{src2}</format>
 <!--  <constraint dest1 = "src2"/>-->
    <condition>
      <test><![CDATA[ {src1}->syms[0]->u.value <= 31]]></test>
    </condition>
  </target>
 </instruction> 

 <instruction id = "LSHU4">
  <target id = "left_shift" src1 = "Constant" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsl #{src1},{src2}</format>
  <!-- <constraint dest1 = "src2"/>-->
    <condition>
      <test><![CDATA[ {src1}->syms[0]->u.value <= 31]]></test>
    </condition>
  </target>
 </instruction>


<!--        Instruction  RSH, with source from Memory Y        -->

 <instruction id = "RSHI4">
  <target id = "right_shift" src1 = "accum" src2 = "MemY" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsr {src1},{src2}</format>
 <!-- <constraint dest1 = "src2"/>-->
  </target>
 </instruction> 

 <instruction id = "RSHU4">
  <target id = "right_shift" src1 = "accum" src2 = "MemY" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsr {src2},{src1}</format>
 <!-- <constraint dest1 = "src2"/>-->
  </target>
 </instruction>
<!--        Instruction  RSH, with source from Accumulator (a1,b1)        -->

 <instruction id = "RSHI4">
  <target id = "right_shift" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsr {src1}1,{src2}</format>
<!--  <constraint dest1 = "src2"/> -->
  </target>
 </instruction> 

 <instruction id = "RSHU4">
  <target id = "right_shift" src1 = "accum" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsr {src1}1,{src2}</format>
 <!-- <constraint dest1 = "src2"/>-->
  </target>
 </instruction>

<!--         RSH, with a constant                        -->

 <instruction id = "RSHI4">
  <target id = "right_shift" src1 = "Constant" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsr #{src1},{src2}</format>
 <!--  <constraint dest1 = "src2"/>-->
    <condition>
      <test><![CDATA[ {src1}->syms[0]->u.value <= 31]]></test>
    </condition>
  </target>
 </instruction> 

 <instruction id = "RSHU4">
  <target id = "right_shift" src1 = "Constant" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>lsr #{src1},{src2}</format>
  <!-- <constraint dest1 = "src2"/>-->
    <condition>
      <test><![CDATA[ {src1}->syms[0]->u.value <= 31]]></test>
    </condition>
  </target>
 </instruction>

 

<!--           Instruction AND with regsiter                       --> 

 <instruction id = "BANDI4">
  <target id = "and" src1 = "MemY" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>and {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
 </instruction>   

 <instruction id = "BANDU4">
  <target id = "and" src1 = "MemY" src2 = "accum" dest1 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>and {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
 </instruction>  
   

<!--           Instruction AND with Imme. long data                     -->

<instruction id = "BANDI4">
  <target id = "and" src2 = "Constant" src1 = "accum" dest1 = "accum">
   <cycle_matrix execute = "2"/>
    <latency l = "1"/> 
  <format>and #{src2},{src1}</format>
    <condition>
      <test><![CDATA[ {src1}->syms[0]->u.value >= 63]]></test>
    </condition>
<!--  <constraint dest1 = "src2"/>-->
  </target>
 </instruction>  

<instruction id = "BANDU4">
  <target id = "and" src2 = "Constant" src1 = "MemY" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>and #{src2},{src1}</format>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
 <!-- <constraint dest1 = "src1"/>-->
  </target>
 </instruction>  

<!--           Instruction AND with Imme. short data                     -->

<instruction id = "BANDI4">
  <target id = "and" src1 = "Constant" src2 = "accum" dest1 = "accum">
    <latency l = "1"/> 
   <cycle_matrix execute = "1"/>
  <format>and #{src1},{src2}</format>
    <condition>
      <test><![CDATA[ {src1}->syms[0]->u.value <= 63]]></test>
    </condition>
<!--  <constraint dest1 = "src2"/>-->
  </target>
 </instruction>  

<instruction id = "BANDU4">
  <target id = "and" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>and #{src2},{src1}</format>
    <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
 <!-- <constraint dest1 = "src2"/>-->
  </target>
 </instruction>  

<!--           Instruction OR  with registers                     -->

 <instruction id = "BORI4">
  <target id = "or" src1 = "MemY" src2 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>or {src1},{src2}</format>
  </target>
 </instruction>

 <instruction id = "BORU4">
  <target id = "or" src1 = "MemY" src2 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>or {src1},{src2}</format>
  </target>
 </instruction>


<!--           Instruction OR with Imme. long data                     -->

<instruction id = "BORI4">
  <target id = "or" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>or #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/> -->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  </target>
 </instruction>  

<instruction id = "BORU4">
  <target id = "or" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>or #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/> -->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  </target>
 </instruction>

<!--           Instruction OR with Imme. short data                     -->

<instruction id = "BORI4">
  <target id = "or" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>or #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/>-->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  </target>
 </instruction>  

<instruction id = "BORU4">
  <target id = "or" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>or #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/>-->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  </target>
 </instruction>


<!--            Instruction EOR  with registers                     -->

 <instruction id = "BXORI4">
  <target id = "eor" src1 = "MemY" src2 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>eor {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
 </instruction>

 <instruction id = "BXORU4">
  <target id = "eor" src1 = "MemY" src2 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>eor {src1},{src2}</format>
  <constraint dest1 = "src2"/>
  </target>
 </instruction>


<!--            Instruction EOR Imme.Long Data                     -->

 <instruction id = "BXORI4">
  <target id = "eor" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>eor #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/>-->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  </target>
 </instruction>

 <instruction id = "BXORU4">
  <target id = "xor" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "2"/>
  <format>eor #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/>-->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value >= 63]]></test>
    </condition>
  </target>
 </instruction>



<!--            Instruction EOR Imme.short Data                     -->

 <instruction id = "BXORI4">
  <target id = "eor" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>eor #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/>-->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  </target>
 </instruction>

 <instruction id = "BXORU4">
  <target id = "xor" src2 = "Constant" src1 = "accum" dest1 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "1"/>
  <format>eor #{src2},{src1}</format>
<!--  <constraint dest1 = "src2"/>-->
   <condition>
      <test><![CDATA[ {src2}->syms[0]->u.value <= 63]]></test>
    </condition>
  </target>
 </instruction>

<!--             Instruction NOT                              -->

 <instruction id = "BCOMI4">
  <target id = "not" src1 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
 <latency l = "1"/>
  <format>not {src1}</format>
  <constraint dest1 = "src1"/>
  </target>
 </instruction>

 <instruction id = "BCOMU4">
  <target id = "not" src1 = "accum" dest1 = "accum">
    <cycle_matrix execute = "1"/>
 <latency l = "1"/>
  <format>not {src1}</format>
  <constraint dest1 = "src1"/>
  </target>
 </instruction>

<!--                  Instruction NEG                        -->

 <instruction id = "NEGF4">
  <target id = "negate" src1 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>neg {src1}</format>
  <constraint dest1 = "src1"/>
  </target>
 </instruction>

 <instruction id = "NEGI4">
  <target id = "negate" src1 = "accum" dest1 = "accum">
    <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>neg {src1}</format>
  <constraint dest1 = "src1"/>
  </target>
 </instruction>

<!--                   Instruction EQ                       -->

 <instruction id = "EQF4" dest = "LABELV">
  <target id = "jump if equal" src1 = "accum" src2 = "MemY">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jeq L{EQF4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "EQI4" dest = "LABELV">
  <target id = "jump if equal" src1 = "accum" src2 = "MemY">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jeq L{EQI4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "EQU4" dest = "LABELV">
  <target id = "jump if equal" src1 = "accum" src2 = "MemY"> 
   <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jeq L{EQU4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "EQF4" dest = "LABELV">
  <target id = "jump if equal" src1 = "accum" src2 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jeq L{EQF4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "EQI4" dest = "LABELV">
  <target id = "jump if equal" src1 = "accum" src2 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jeq L{EQI4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "EQU4" dest = "LABELV">
  <target id = "jump if equal" src1 = "accum" src2 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jeq L{EQU4.SYM0.NAME}</format>
  </target>
 </instruction>

<!--                   Instruction GE                       -->

 <instruction id = "GEF4">
  <target id = "jump if greater or equal" src1 = "accum" src2 = "MemY">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jge L{GEF4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "GEI4">
  <target id = "jump if greater or equal" src1 = "accum" src2 = "MemY">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jge L{GEI4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "GEU4">
  <target id = "jump if greater or equal" src1 = "accum" src2 = "MemY">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jge L{GEU4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "GEF4">
  <target id = "jump if greater or equal" src1 = "accum" src2 = "accum">
 <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jge L{GEF4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "GEI4">
  <target id = "jump if greater or equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jge L{GEI4.SYM0.NAME}</format>
  </target>
 </instruction>

 <instruction id = "GEU4">
  <target id = "jump if greater or equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jge L{GEU4.SYM0.NAME}</format>
  </target>
 </instruction>

<!--                  Instruction GT                   -->

<instruction id = "GTF4">
  <target id = "jump if greater than" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{GTF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "GTI4">
  <target id = "jump if greater than" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{GTI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "GTU4">
  <target id = "jump if greater than" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{GTU4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "GTF4">
  <target id = "jump if greater than" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{GTF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "GTI4">
  <target id = "jump if greater than" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{GTI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "GTU4">
  <target id = "jump if greater than" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{GTU4.SYM0.NAME}</format>
  </target>
 </instruction>

<!--                  Instruction LE                   -->

<instruction id = "LEF4">
  <target id = "jump if less than or equal" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{LEF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LEI4">
  <target id = "jump if less than or equal" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{LEI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LEU4">
  <target id = "jump if less than or equal" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{LEU4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LEF4">
  <target id = "jump if less than or equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{LEF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LEI4">
  <target id = "jump if less than or equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{LEI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LEU4">
  <target id = "jump if less than or equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jgt L{LEU4.SYM0.NAME}</format>
  </target>
 </instruction>

<!--                    Instruction LT                        -->

<instruction id = "LTF4">
  <target id = "jump if less than" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jlt L{LTF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LTI4">
  <target id = "jump if less than" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jlt L{LTI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LTU4">
  <target id = "jump if less than" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jlt L{LTU4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LTF4">
  <target id = "jump if less than" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jlt L{LTF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LTI4">
  <target id = "jump if less than" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jlt L{LTI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "LTU4">
  <target id = "jump if less than" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1} 
jlt L{LTU4.SYM0.NAME}</format>
  </target>
 </instruction>

<!--              Instruction NE                        -->

<instruction id = "NEF4">
  <target id = "jump if not equal" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jne L{NEF4.SYM0.NAME}</format>
  </target>
 </instruction>


<instruction id = "NEI4">
  <target id = "jump if not equal" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jne L{NEI4.SYM0.NAME}</format>
  </target>
 </instruction>


<instruction id = "NEU4">
  <target id = "jump if not equal" src1 = "accum" src2 = "MemY">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jne L{NEU4.SYM0.NAME}</format>
  </target>
 </instruction>


<instruction id = "NEF4">
  <target id = "jump if not equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jne L{NEF4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "NEI4">
  <target id = "jump if not equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jne L{NEI4.SYM0.NAME}</format>
  </target>
 </instruction>

<instruction id = "NEU4">
  <target id = "jump if not equal" src1 = "accum" src2 = "accum">
  <latency l = "1"/>
    <cycle_matrix execute = "4"/>
  <format>cmp {src2},{src1}
jne L{NEU4.SYM0.NAME}</format>
  </target>
 </instruction>

<!--            instructions described by patterns            -->
<!-- abs pattern -->
<pattern id = "abs">
  <ptarget id = "call_abs">
   <op id = "call_abs">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "2"/>
 <latency l = "1"/>
  <format>abs {accummulate}</format>
  <condition>
   <test>!strcmp({call_abs}->syms[0]->name, "abs")</test>
  </condition>
 </ptarget>
</pattern>

<!-- adc pattern -->
<pattern id = "adc">
  <ptarget id = "call_adc">
   <op id = "call_adc">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>MemY</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "2"/>
  <latency l = "1"/>
  <format>adc Y,{Fa}</format>
  <condition>
   <test>!strcmp({call_adc}->syms[0]->name, "adc")</test>
  </condition>
 </ptarget>
</pattern>

<!-- addl pattern -->
<pattern id = "ADDL">
  <ptarget id = "shiftleft and add" dest1 = "accum">
   <op id = "constant"><id>Constant</id></op>
   <op id = "Fb"><id>accum</id></op>
   <op id = "Fa"><id>accum</id> </op>
   <op id = "assign"><id>accum</id></op>
   <format>addl {Fa},{Fb}</format>
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  </ptarget>
 </pattern>

<!-- addr pattern -->
 <pattern id = "ADDR">
  <ptarget id = "shiftright and add" dest1 = "accum">
   <op id = "constant"><id>Constant</id></op>
   <op id = "Fb"><id>accum</id></op>
   <op id = "Fa"><id>accum</id> </op>
   <op id = "assign"><id>accum</id> </op>
   <format>addr {Fa},{Fb}</format>
    <cycle_matrix execute = "1"/>
    <latency l = "1"/>
  </ptarget>
 </pattern>

<!-- pattern for CLR -->

<pattern id = "clr">
  <ptarget id = "call_clr">
   <op id = "call_clr">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <fu/>
  <cycle_matrix execute = "1"/>
    <latency l = "1"/>
  <format>clr {accummulate}</format>
  <condition>
   <test>!strcmp({call_clr}->syms[0]->name, "clr")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for CMPM, FFA from Memory -->
<pattern id = "cmpm">
  <ptarget id = "call_cmpm">
   <op id = "call_cmpm">
    <id>Gsymbol</id>
   </op>
   <op id = "FFb">  
    <id>accum</id>
   </op>
   <op id = "FFa"><id>MemY</id></op>
  <cycle_matrix execute = "1"/>
     <latency l = "1"/>
  <format>cmpm {FFa},{FFb}</format>
  <condition>
   <test>!strcmp({call_cmpm}->syms[0]->name, "cmpm")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for CMPM, FFA from accumulator -->
<pattern id = "cmpm">
  <ptarget id = "call_cmpm">
   <op id = "call_cmpm">
    <id>Gsymbol</id>
   </op>
   <op id = "FFb">  
    <id>accum</id>
   </op>
   <op id = "FFa"><id>accum</id></op>
  <cycle_matrix execute = "1"/>
    <latency l = "1"/>
  <format>cmpm {FFa},{FFb}</format>
  <condition>
   <test>!strcmp({call_cmpm}->syms[0]->name, "cmpm")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for CMPU, FFA from Memory -->
<pattern id = "cmpu">
  <ptarget id = "call_cmpu">
   <op id = "call_cmpu">
    <id>Gsymbol</id>
   </op>
   <op id = "FFb">  
    <id>accum</id>
   </op>
   <op id = "FFa"><id>MemY</id></op>
  <cycle_matrix execute = "1"/>
    <latency l = "1"/>
  <format>cmpu {FFa},{FFb}</format>
  <condition>
   <test>!strcmp({call_cmpu}->syms[0]->name, "cmpu")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for CMPU, FFA from accumulator -->
<pattern id = "cmpu">
  <ptarget id = "call_cmpu">
   <op id = "call_cmpu">
    <id>Gsymbol</id>
   </op>
   <op id = "FFb">  
    <id>accum</id>
   </op>
   <op id = "FFa"><id>accum</id></op>
  <cycle_matrix execute = "1"/>
    <latency l = "1"/>
  <format>cmpu {FFa},{FFb}</format>
  <condition>
   <test>!strcmp({call_cmpu}->syms[0]->name, "cmpu")</test>
  </condition>
 </ptarget>
</pattern>
<!-- inc pattern -->
<pattern id = "inc">
  <ptarget id = "call_inc">
   <op id = "call_inc">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
 <latency l = "1"/>
  <format>inc {accummulate}</format>
  <condition>
   <test>!strcmp({call_inc}->syms[0]->name, "inc")</test>
  </condition>
 </ptarget>
</pattern>

<!-- lsr pattern -->
<pattern id = "lsr">
  <ptarget id = "call_lsr">
   <op id = "call_lsr">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
 <latency l = "1"/>
  <format>lsr {accummulate}</format>
  <condition>
   <test>!strcmp({call_lsr}->syms[0]->name, "lsr")</test>
  </condition>
 </ptarget>
</pattern>

<!-- lsl pattern -->
<pattern id = "lsl">
  <ptarget id = "call_lsl">
   <op id = "call_inc">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
 <latency l = "1"/>
  <format>lsl {accummulate}</format>
  <condition>
   <test>!strcmp({call_lsl}->syms[0]->name, "lsl")</test>
  </condition>
 </ptarget>
</pattern>


<!-- pattern for INC, not right -->

<pattern id = "increment">
 <ptarget id = "ASGNI4">
   <op id = "addressFa">
    <id>Gsymbol</id>
   </op>
   <op id = "one">
    <id>Constant</id>
   </op>
   <cycle_matrix execute = "1"/> 
   <format>incc {addressFa}</format>
 </ptarget>
</pattern>

<!-- dec pattern -->
<pattern id = "dec">
  <ptarget id = "call_dec">
   <op id = "call_dec">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
 <latency l = "1"/>
  <format>dec {accummulate}</format>
  <condition>
   <test>!strcmp({call_dec}->syms[0]->name, "dec")</test>
  </condition>
 </ptarget>
</pattern>




<!-- andi pattern -->
<pattern id = "andi">
  <ptarget id = "call_andi">
   <op id = "call_andi">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>Constant</id>
   </op>
   <op id = "Fa">  
    <id>PC</id>
   </op>
  <cycle_matrix execute = "3"/>
  <latency l = "1"/>
  <format>andi {Fb},{Fa}</format>
  <condition>
   <test>!strcmp({call_andi}->syms[0]->name, "andi")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for MAC -->
 <pattern id = "MAC">
  <ptarget id = "multi-accumlate" dest1 = "accum">
   <op id = "Fa"><id>MemY</id></op>
   <op id = "Fb"><id>MemY</id></op>
   <op id = "assignvalue"><id>accum</id> </op>
   <op id = "assall"><id>accum</id> </op>
   <format>mac {Fa},{Fb},{assignvalue}</format>
   <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  </ptarget>
 </pattern>

<!-- pattern for MACI -->
 <pattern id = "MACI">
  <ptarget id = "multi-accumlate" dest1 = "accum">
   <op id = "Fc"><id>Constant</id></op>
   <op id = "Fs"><id>MemY</id></op>
   <op id = "assignvalue"><id>accum</id> </op>
  <cycle_matrix execute = "2"/>
  <latency l = "1"/>
   <format>maci #{Fc},{Fs},{assignvalue}</format>
  </ptarget>
 </pattern>

<!-- pattern for MACRI -->
 <pattern id = "MACRI">
  <ptarget id = "multi-accumlate" dest1 = "accum">
   <op id = "Fc"><id>Constant</id></op>
   <op id = "Fs"><id>MemY</id></op>
   <op id = "assignvalue"><id>accum</id> </op>
   <cycle_matrix execute = "2"/>
   <latency l = "1"/>
   <format>macri #{Fc},{Fs},{assignvalue}</format>
  </ptarget>
 </pattern>

<!-- pattern for MPYR -->
<pattern id = "mpyr" dest = "accum">
  <ptarget id = "call_mpyr">
   <op id = "call_mpyr">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>MemY</id>
   </op>
   <op id = "Fss">  
    <id>MemY</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>mpyr {Fs},{Fss},{Fd}</format>
  <condition>
   <test>!strcmp({call_mpyr}->syms[0]->name, "mpyr")</test>
  </condition>
 </ptarget>
</pattern>


<!-- pattern for MACR -->
<pattern id = "macr" dest = "accum">
  <ptarget id = "call_macr">
   <op id = "call_macr">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>MemY</id>
   </op>
   <op id = "Fc">  
    <id>MemY</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>macr {Fs},{Fc},{Fd}</format>
  <condition>
   <test>!strcmp({call_macr}->syms[0]->name, "macr")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for norm -->
<pattern id = "norm">
  <ptarget id = "call_norm">
   <op id = "call_norm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fbr">  
    <id>Rn</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <latency l = "1"/>
  <cycle_matrix execute = "5"/>
  <format>norm {Fbr},{Fa}</format>
  <condition>
   <test>!strcmp({call_norm}->syms[0]->name, "norm")</test>
  </condition> 
 </ptarget>
</pattern>
   
<!-- pattern for normf, source from MemoryY -->
<pattern id = "normf">
  <ptarget id = "call_normf">
   <op id = "call_normf">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>accum</id>
   </op>
   <op id = "Fa">  
    <id>MemY</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>normf {Fa},{Fb}</format>
  <condition>
   <test>!strcmp({call_normf}->syms[0]->name, "normf")</test>
  </condition>
 </ptarget>
</pattern> 

<!-- pattern for normf, source from accumulator -->
<pattern id = "normf">
  <ptarget id = "call_normf">
   <op id = "call_normf">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>accum</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>normf {Fa}1,{Fb}</format>
  <condition>
   <test>!strcmp({call_normf}->syms[0]->name, "normf")</test>
  </condition>
  <!--  <condition>-->
  <!--   <and>-->
  <!--    <test><![CDATA[ {Fa}->u.value >= 23]]></test>-->
  <!--    <test><![CDATA[ {Fa}->u.value <= 47]]></test>-->
  <!--   </and>-->
 <!--   </condition>-->
 </ptarget>
</pattern> 

<!--  pattern for RND -->
<pattern id = "rnd">
  <ptarget id = "call_rnd">
   <op id = "call_rnd">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <fu/>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>rnd {accummulate}</format>
  <condition>
   <test>!strcmp({call_rnd}->syms[0]->name, "rnd")</test>
  </condition>
 </ptarget>
</pattern>


<!-- pattern for ROL -->
<pattern id = "rol">
  <ptarget id = "call_rol">
   <op id = "call_rol">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>rol {accummulate}</format>
  <condition>
   <test>!strcmp({call_rol}->syms[0]->name, "rol")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for ror -->
<pattern id = "ror">
  <ptarget id = "call_ror">
   <op id = "call_ror">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>ror {accummulate}</format>
  <condition>
   <test>!strcmp({call_ror}->syms[0]->name, "ror")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for sbc for Memory Y -->
<pattern id = "sbc">
  <ptarget id = "call_adc">
   <op id = "call_sbc">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>MemY</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>sbc Y,{Fa}</format>
  <condition>
   <test>!strcmp({call_sbc}->syms[0]->name, "sbc")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for sbc for Memory X -->
<pattern id = "sbc">
  <ptarget id = "call_adc">
   <op id = "call_sbc">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>MemX</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>sbc {Fb},{Fa}</format>
  <condition>
   <test>!strcmp({call_sbc}->syms[0]->name, "sbc")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for lsl with constant  -->
<!--<pattern id = "lsl"> -->
<!--  <ptarget id = "call_lsl"> -->
<!--   <op id = "call_lsl"> -->
<!--    <id>Gsymbol</id> -->
<!--   </op> -->
<!--   <op id = "Fb">   -->
<!--    <id>accum</id> -->
<!--   </op> -->
<!--   <op id = "Fa">   -->
<!--    <id>Constant</id> -->
<!--   </op> -->
<!--  <cycle_matrix execute = "1"/> -->
<!--   <latency l = "1"/> -->
<!--  <format>lsl #{Fa},{Fb}</format> -->
<!--  <condition> -->
<!--   <test>!strcmp({call_lsl}->syms[0]->name, "lsl")</test> -->
<!--  </condition> -->
<!-- </ptarget> -->
<!--</pattern> -->

<!-- pattern for SUBL -->
 <pattern id = "SUBL">
  <ptarget id = "shiftleft and subtract" dest1 = "accum">
   <op id = "constant">
    <id>Constant</id>
   </op>
   <op id = "Fb">
    <id>accum</id>
   </op>
   <op id = "Fa">
    <id>accum</id> 
   </op>
   <op id = "assign">
    <id>accum</id> 
   </op>
   <cycle_matrix execute = "1"/>
   <latency l = "1"/>
  <format>subl {Fa},{Fb}</format>
  </ptarget>
 </pattern>

<!-- pattern for SUBR -->
<pattern id = "SUBR">
  <ptarget id = "shiftright and subtract" dest1 = "accum">
   <op id = "constant">
    <id>Constant</id>
   </op>
   <op id = "Fb">
    <id>accum</id>
   </op>
   <op id = "Fa">
    <id>accum</id> 
   </op>
   <op id = "assign">
    <id>accum</id> 
   </op>
   <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>subr {Fa},{Fb}</format>
  </ptarget>
 </pattern>

<!-- pattern for tfr source from Memory-->
<pattern id = "tfr">
  <ptarget id = "call_tfr">
   <op id = "call_tfr">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>MemY</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>tfr {Fb},{Fa}</format>
  <condition>
   <test>!strcmp({call_tfr}->syms[0]->name, "tfr")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for tfr source from accumulator-->
<pattern id = "tfr">
  <ptarget id = "call_tfr">
   <op id = "call_tfr">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>accum</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>tfr {Fb},{Fa}</format>
  <condition>
   <test>!strcmp({call_tfr}->syms[0]->name, "tfr")</test>
  </condition>
 </ptarget>
</pattern>

<!-- pattern for ASL -->
<pattern id = "asl">
  <ptarget id = "call_asl">
   <op id = "call_asl">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asl {accummulate}</format>
  <condition>
   <test>!strcmp({call_asl}->syms[0]->name, "asl")</test>
  </condition>
 </ptarget>
</pattern>

<!--  pattern for T-ASL -->
<pattern id = "aslm" dest = "accum">
  <ptarget id = "call_aslm">
   <op id = "call_aslm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>accum</id>
   </op>
   <op id = "Fc">  
    <id>MemY</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asl {Fc},{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_aslm}->syms[0]->name, "aslm")</test>
  </condition>
 </ptarget>
</pattern>

<pattern id = "aslm" dest = "accum">
  <ptarget id = "call_aslm">
   <op id = "call_aslm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>accum</id>
   </op>
   <op id = "Fc">  
    <id>Constant</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asl #{Fc},{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_aslm}->syms[0]->name, "aslm")</test>
  </condition>
 </ptarget>
</pattern>

<pattern id = "aslm" dest = "accum">
  <ptarget id = "call_aslm">
   <op id = "call_aslm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>accum</id>
   </op>
   <op id = "Fc">  
    <id>accum</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asl {Fc}1,{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_aslm}->syms[0]->name, "aslm")</test>
  </condition>
 </ptarget>
</pattern>


<!-- pattern for ASR -->
<pattern id = "asr">
  <ptarget id = "call_asr">
   <op id = "call_asr">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <fu/>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asr {accummulate}</format>
  <condition>
   <test>!strcmp({call_asr}->syms[0]->name, "asr")</test>
  </condition>
 </ptarget>
</pattern>

<!--  pattern for T-ASR -->
<pattern id = "asrm" dest = "accum">
  <ptarget id = "call_asrm">
   <op id = "call_asrm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>accum</id>
   </op>
   <op id = "Fc">  
    <id>accum</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asr {Fc}1,{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_asrm}->syms[0]->name, "asrm")</test>
  </condition>
 </ptarget>
</pattern>

<pattern id = "asrm" dest = "accum">
  <ptarget id = "call_asrm">
   <op id = "call_asrm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>accum</id>
   </op>
   <op id = "Fc">  
    <id>Constant</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asr {Fc},{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_asrm}->syms[0]->name, "asrm")</test>
  </condition>
 </ptarget>
</pattern>

<pattern id = "asrm" dest = "accum">
  <ptarget id = "call_asrm">
   <op id = "call_asrm">
    <id>Gsymbol</id>
   </op>
   <op id = "Fs">  
    <id>accum</id>
   </op>
   <op id = "Fc">  
    <id>MemY</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>asr {Fc},{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_asrm}->syms[0]->name, "asrm")</test>
  </condition>
 </ptarget>
</pattern>

<!--              pattern for MAX             -->
<pattern id = "max">
  <ptarget id = "call_max">
   <op id = "call_max">
    <id>Gsymbol</id>
   </op>
   <op id = "Fb">  
    <id>accum</id>
   </op>
   <op id = "Fa">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "1"/>
  <latency l = "1"/>
  <format>max {Fb},{Fa}</format>
  <condition>
   <test>!strcmp({call_max}->syms[0]->name, "max")</test>
  </condition>
 </ptarget>
</pattern>


<!-- pattern for some functionalities -->
<pattern id = "assign">
 <ptarget id = "assign">
  <op id = "address">
   <id>Gsymbol</id>
  </op>
  <op id = "something">
   <id>MemY</id>
  </op>
  <cycle_matrix execute = "3"/>
  <latency l = "0"/>
  <format>pull {something}
move {something},{address}</format>
 </ptarget>
</pattern>

 <instruction id="RETF4">
  <target id="RETI4" src1 = "accum">
   <cycle_matrix execute="3"/>
  <latency l = "0"/>
   <format>rts</format>
  </target>
</instruction>

 <instruction id="RETI4">
  <target id="RETI4" src1 = "accum">
   <cycle_matrix execute="3"/>
  <latency l = "0"/>
   <format>rts</format>
  </target>
 </instruction>

 <instruction id="RETU4">
  <target id="RETI4" src1 = "accum">
   <cycle_matrix execute="3"/>
  <latency l = "1"/>
   <format>rts</format>
  </target>
 </instruction>

 <instruction id="RETP4">
  <target id="RETI4" src1 = "accum">
   <cycle_matrix execute="3"/>
  <latency l = "0"/>
   <format>rts</format>
  </target>
 </instruction>

<!-- pattern for Jump or brance -->
<pattern id = "jump">
  <ptarget id = "jump2">
   <op id = "address"><id>Gsymbol</id></op>
   <format>jmp L{address.SYM0.X.NAME}</format>
   <cycle_matrix execute = "4"/>
  </ptarget>
</pattern>

<pattern id = "branch">
  <ptarget id = "jump2">
   <op id = "address"><id>Gsymbol</id></op>
   <format>bra {address.SYM0.X.NAME}</format>
   <cycle_matrix execute = "5"/>
  </ptarget>
</pattern>

 <instruction id="CALLF4">
  <target id="calls" src1 = "Gsymbol" dest1 = "MemY">
   <cycle_matrix execute="1"/>
   <format>move {src1},{dest1}</format>
  </target>
 </instruction>

 <instruction id="CALLI4">
  <target id="calls" src1 = "Gsymbol" dest1 = "MemY">
   <cycle_matrix execute="1"/>
   <format>move {src1},{dest1}</format>
  </target>
 </instruction>

 <instruction id="CALLU4">
  <target id="calls" src1 = "Gsymbol" dest1 = "MemY">
   <cycle_matrix execute="1"/>
   <format>move {src1},{dest1}</format>
  </target>
 </instruction>

 <instruction id="CALLP4">
  <target id="calls" src1 = "Gsymbol" dest1 = "MemY">
   <cycle_matrix execute="1"/>
   <format>move {src1},{dest1}</format>
  </target>
 </instruction>
<!--
<pattern id = "callin">
 <ptarget id = "call_func">
   <op id = "call_func">
    <id>Gsymbol</id>
   </op>
   <op id = "accummulate">  
    <id>accum</id>
   </op>
  <cycle_matrix execute = "2"/>
  <format>jsr {call_func.SYM0.NAME}</format>
 </ptarget>
</pattern>
-->
  <pattern id = "JEQ"> 
      <ptarget id = "CMP"> 
         <op id="0"> 
	    <id>accum</id> 
	 </op> 
         <op id="1">
	    <id>MemY</id>
	 </op>
        <latency l = "1"/>
        <cycle_matrix execute = "3"/>
      <ptarget id = "J">
      <format> cmp {0},{1}</format> 
      </ptarget> 
        <latency l = "1"/>
        <cycle_matrix execute = "2"/>
      <format> cmp {0},{1}
jeq L{JEQ.SYM0.NAME} </format>
      </ptarget>
   </pattern> 

<pattern id = "macr" dest = "accum">
  <ptarget id = "call_macr">
   <op id = "call_macr">
    <id>Gsymbol</id>
   </op>
   <op id = "Fd">  
    <id>accum</id>
   </op>
   <op id = "Fs">  
    <id>MemY</id>
   </op>
   <op id = "Fc">  
    <id>MemY</id>
   </op>
  <cycle_matrix execute = "1"/>
 <latency l = "1"/>
  <format>macr {Fc},{Fs},{Fd}</format>
  <condition>
   <test>!strcmp({call_macr}->syms[0]->name, "macr")</test>
  </condition>
 </ptarget>
</pattern>
   



</instructionset>

<patterns>

<!--          pattern for instruction abs                   -->

<pattern id = "abs">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "call_abs">
     <node>
      <or>
       <pinst id = "ADDRFP4" arity = "0"/>
       <pinst id = "ADDRGP4" arity = "0"/>
       <pinst id = "ADDRLP4" arity = "0"/>
      </or>
     </node>
    </kid>
  </node>
  <node id = "argument">
   <or>
    <pinst id = "ARGF4" arity = "1"/>
    <pinst id = "ARGI4" arity = "1"/>
    <pinst id = "ARGU4" arity = "1"/>
    <pinst id = "ARGP4" arity = "1"/>
<!--    <pinst id = "ARGB4" arity = "1"/> -->
   </or>
    <kid nr = "0" id = "accummulate"/>
  </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>



<!--  pattern for instruction adc     -->

<pattern id = "adc">
 <node id = "CALLI4"> 
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
 <!--  <pinst id = "CALLV4" arity = "1"/> -->
 <!--  <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_adc">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
   <pinst id = "ARGF8" arity = "1"/>
 <!--  <pinst id = "ARGB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "Fa"/>
     <!--<node>-->
       <!--<pinst id = "INDIRI4" arity = "1"/>-->
        <!--<kid nr = "0" id = "Fa"/>-->
         <!--<node>-->
          <!--<pinst id = "ADDRGP4" arity = "0"/>-->
         <!--</node> -->
     <!--</node> -->
    <!--</kid>  -->
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
   <pinst id = "ARGF8" arity = "1"/>
 <!--  <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fb"/>
     <!--<node>-->
      <!--<pinst id = "INDIRI4" arity = "1"/>-->
       <!--<kid nr = "0" id = "Fb"/>-->
     <!--</node> -->
    <!--</kid> -->
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>

<!--                 pattern for instruction ADDL                        -->

<pattern id = "ADDL">
   <node id = "assign" commutative = "yes">
    <or>
     <pinst id = "ADDF4" arity = "2"/>
     <pinst id = "ADDI4" arity = "2"/>
     <pinst id = "ADDU4" arity = "2"/>
     <pinst id = "ADDP4" arity = "2"/>
    </or>
     <kid nr = "0" id = "Fa"/> 
     <kid nr = "1" id = "shift">
       <node>
        <or>
         <pinst id = "LSHI4" arity = "2"/>  
         <pinst id = "LSHU4" arity = "2"/>  
        </or>
         <kid nr = "0" id = "Fb"/>
         <kid nr = "1" id = "constant"/>
       </node>
     </kid>
   </node>
</pattern>
  
<!--                    Instruction ADDR                                -->

<pattern id = "ADDR">
   <node id = "assign" commutative = "yes">
    <or>
     <pinst id = "ADDF4" arity = "2"/>
     <pinst id = "ADDI4" arity = "2"/>
     <pinst id = "ADDU4" arity = "2"/>
     <pinst id = "ADDP4" arity = "2"/>
    </or>
     <kid nr = "0" id = "Fa"/> 
     <kid nr = "1" id = "shift">
       <node>
        <or>
         <pinst id = "DIVF4" arity = "2"/>  
         <pinst id = "DIVI4" arity = "2"/> 
         <pinst id = "DIVU4" arity = "2"/> 
        </or>
         <kid nr = "0" id = "Fb"/>
         <kid nr = "1" id = "constant"/>
       </node>
     </kid>
   </node>
</pattern>

<!--                    Instruction CLR                                  -->


<pattern id = "clr">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_clr">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>

<!--                            Instruction for CMPM                   -->

<pattern id = "cmpm">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLB4" arity = "1"/> -->
<!--   <pinst id = "CALLV4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_cmpm">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "FFa">
   </kid>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGV4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "FFb">
   </kid>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>

<!--                            Instruction for CMPU                   -->

<pattern id = "cmpu">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLB4" arity = "1"/> -->
<!--   <pinst id = "CALLV4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_cmpu">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "FFa">
   </kid>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGV4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "FFb">
   </kid>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>

<!--          pattern for instruction inc                   -->

<pattern id = "inc">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "call_inc">
     <node>
      <or>
       <pinst id = "ADDRFP4" arity = "0"/>
       <pinst id = "ADDRGP4" arity = "0"/>
       <pinst id = "ADDRLP4" arity = "0"/>
      </or>
     </node>
    </kid>
  </node>
  <node id = "argument">
   <or>
    <pinst id = "ARGF4" arity = "1"/>
    <pinst id = "ARGI4" arity = "1"/>
    <pinst id = "ARGU4" arity = "1"/>
    <pinst id = "ARGP4" arity = "1"/>
<!--    <pinst id = "ARGB4" arity = "1"/> -->
   </or>
    <kid nr = "0" id = "accummulate"/>
  </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>


<!--                      Instruction for INC -not right                    -->

<pattern id = "increment">
 <node id = "add_update">
  <or>
   <pinst id = "ASGNF4" arity = "2"/>
   <pinst id = "ASGNI4" arity = "2"/>
   <pinst id = "ASGNU4" arity = "2"/>
   <pinst id = "ASGNP4" arity = "2"/>
<!--   <pinst id = "ASGNB4" arity = "2"/>-->
  </or>
    <kid nr = "0" id = "addressFa"/>
    <kid nr = "1" id = "added">
      <node>
       <or>
        <pinst id = "ADDF4" arity = "2"/>
        <pinst id = "ADDI4" arity = "2"/>
        <pinst id = "ADDU4" arity = "2"/>
        <pinst id = "ADDP4" arity = "2"/>
       </or>
        <kid nr = "0" id = "valueFa">
         <node>
          <or>
           <pinst id = "INDIRF4" arity = "1"/>
           <pinst id = "INDIRI4" arity = "1"/>
           <pinst id = "INDIRU4" arity = "1"/>
           <pinst id = "INDIRP4" arity = "1"/>
<!--           <pinst id = "INDIRB4" arity = "1"/>-->
          </or>
          <kid nr = "0" id = "addressFa"/>
         </node>
        </kid>   
        <kid nr = "1" id = "one"/>
      </node>
     </kid>
 </node>
 <node id = "assign2">
  <or>
   <pinst id = "ASGNF4" arity = "2"/>
   <pinst id = "ASGNI4" arity = "2"/>
   <pinst id = "ASGNU4" arity = "2"/>
<!--   <pinst id = "ASGNP4" arity = "2"/> -->
<!--   <pinst id = "ASGNB4" arity = "2"/> -->
  </or>
   <kid nr = "0" id = "addressFa"/>
   <kid nr = "1" id = "added"/>
 </node>
 <ddep src = "add_update" dest = "assign2"/>
 
</pattern>


<!--          pattern for instruction dec                   -->

<pattern id = "dec">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "call_dec">
     <node>
      <or>
       <pinst id = "ADDRFP4" arity = "0"/>
       <pinst id = "ADDRGP4" arity = "0"/>
       <pinst id = "ADDRLP4" arity = "0"/>
      </or>
     </node>
    </kid>
  </node>
  <node id = "argument">
   <or>
    <pinst id = "ARGF4" arity = "1"/>
    <pinst id = "ARGI4" arity = "1"/>
    <pinst id = "ARGU4" arity = "1"/>
    <pinst id = "ARGP4" arity = "1"/>
<!--    <pinst id = "ARGB4" arity = "1"/> -->
   </or>
    <kid nr = "0" id = "accummulate"/>
  </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>



<!--          pattern for instruction lsr                   -->

<pattern id = "lsr">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "call_lsr">
     <node>
      <or>
       <pinst id = "ADDRFP4" arity = "0"/>
       <pinst id = "ADDRGP4" arity = "0"/>
       <pinst id = "ADDRLP4" arity = "0"/>
      </or>
     </node>
    </kid>
  </node>
  <node id = "argument">
   <or>
    <pinst id = "ARGF4" arity = "1"/>
    <pinst id = "ARGI4" arity = "1"/>
    <pinst id = "ARGU4" arity = "1"/>
    <pinst id = "ARGP4" arity = "1"/>
<!--    <pinst id = "ARGB4" arity = "1"/> -->
   </or>
    <kid nr = "0" id = "accummulate"/>
  </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>



<!--          pattern for instruction lsl                   -->

<pattern id = "lsl">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "call_lsl">
     <node>
      <or>
       <pinst id = "ADDRFP4" arity = "0"/>
       <pinst id = "ADDRGP4" arity = "0"/>
       <pinst id = "ADDRLP4" arity = "0"/>
      </or>
     </node>
    </kid>
  </node>
  <node id = "argument">
   <or>
    <pinst id = "ARGF4" arity = "1"/>
    <pinst id = "ARGI4" arity = "1"/>
    <pinst id = "ARGU4" arity = "1"/>
    <pinst id = "ARGP4" arity = "1"/>
<!--    <pinst id = "ARGB4" arity = "1"/> -->
   </or>
    <kid nr = "0" id = "accummulate"/>
  </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>


<!--                pattern for instruction andi                          -->

<pattern id = "andi">
 <node id = "CALLI4"> 
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
 <!--  <pinst id = "CALLV4" arity = "1"/> -->
 <!--  <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_andi">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
 <!--  <pinst id = "ARGB4" arity = "1"/> -->
  </or>
    <kid nr = "0" id = "Fa"/>
     <!--<node>-->
       <!--<pinst id = "INDIRI4" arity = "1"/>-->
        <!--<kid nr = "0" id = "Fa"/>-->
         <!--<node>-->
          <!--<pinst id = "ADDRGP4" arity = "0"/>-->
         <!--</node> -->
     <!--</node> -->
    <!--</kid>  -->
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
 <!--  <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fb">
     <node>
      <or>
       <pinst id = "CNSTF4" arity = "0"/>
       <pinst id = "CNSTI4" arity = "0"/>
       <pinst id = "CNSTU4" arity = "0"/>
       <pinst id = "CNSTP4" arity = "0"/>
      </or>
     </node>
    </kid>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>





<!--                        Instruction for MAC                         -->

<pattern id = "MAC">
   <node id = "assall" commutative = "yes">
    <or>
     <pinst id = "ADDF4" arity = "2"/>
     <pinst id = "ADDI4" arity = "2"/>
     <pinst id = "ADDU4" arity = "2"/>
<!--     <pinst id = "ADDP4" arity = "2"/> -->
    </or>
     <kid nr = "1" id = "assignvalue"/> 
     <kid nr = "0" id = "multiply">
       <node>
        <or>
         <pinst id = "MULF4" arity = "2"/>  
         <pinst id = "MULI4" arity = "2"/>  
         <pinst id = "MULU4" arity = "2"/>  
        </or>
         <kid nr = "0" id = "Fa"/>
         <kid nr = "1" id = "Fb"/>
       </node>
     </kid>
   </node>
</pattern>

<!--                           Instruction MACI                        -->

<pattern id = "MACI">
   <node id = "assall" commutative = "yes">
    <or>
     <pinst id = "ADDF4" arity = "2"/>
     <pinst id = "ADDI4" arity = "2"/>
     <pinst id = "ADDU4" arity = "2"/>
<!--     <pinst id = "ADDP4" arity = "2"/> -->
    </or>
     <kid nr = "0" id = "assignvalue"/> 
     <kid nr = "1" id = "multiply">
       <node>
        <or>
         <pinst id = "MULF4" arity = "2"/>  
         <pinst id = "MULI4" arity = "2"/>  
         <pinst id = "MULU4" arity = "2"/>  
        </or>
         <kid nr = "0" id = "Fc"/>
         <kid nr = "1" id = "Fs"/>
       </node>
     </kid>
   </node>
</pattern>

<!--                           Instruction MACRI                        -->

<pattern id = "MACRI">
   <node id = "assall" commutative = "yes">
    <or>
     <pinst id = "ADDF4" arity = "2"/>
     <pinst id = "ADDI4" arity = "2"/>
     <pinst id = "ADDU4" arity = "2"/>
<!--     <pinst id = "ADDP4" arity = "2"/> -->
    </or>
     <kid nr = "0" id = "assignvalue"/> 
     <kid nr = "1" id = "multiply">
       <node>
        <or>
         <pinst id = "MULF4" arity = "2"/>  
         <pinst id = "MULI4" arity = "2"/>  
         <pinst id = "MULU4" arity = "2"/>  
        </or>
         <kid nr = "0" id = "Fc"/>
         <kid nr = "1" id = "Fs"/>
       </node>
     </kid>
   </node>
</pattern>

<!--                        Instruction for MPYR                       -->

<pattern id = "mpyr">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_mpyr"/>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fd">
   </kid>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "arg2">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fss"/>
 </node>
<link src = "arg2" dest = "arg1"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fs"/>
 </node>
<link src = "argument" dest = "arg2"/>
</pattern>

<!--                   Instruction for MACR                          -->

<pattern id = "macr">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_macr"/>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fd">
   </kid>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "arg2">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fc"/>
 </node>
<link src = "arg2" dest = "arg1"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "Fs"/>
 </node>
<link src = "argument" dest = "arg2"/>
</pattern>

<!--                     Instruction for Norm                        -->

<pattern id = "norm">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_norm">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fa"/>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fb">
    <node>
     <or>
      <pinst id = "INDIRF4" arity = "1"/>
      <pinst id = "INDIRI4" arity = "1"/>
      <pinst id = "INDIRU4" arity = "1"/>
      <pinst id = "INDIRP4" arity = "1"/>
<!--      <pinst id = "INDIRB4" arity = "1"/>-->
     </or>
      <kid nr = "0" id = "Fbr"/>
    </node>
   </kid> 
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>

<!--                      Instruction for NORMF                         -->

<pattern id = "normf">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_normf">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>  
   <kid nr = "0" id = "Fa"/>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fb"/>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>

<!--                       Instruction for RND                           -->

<pattern id = "rnd">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_rnd">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>

<!--                      Instruction for ROL                      -->

<pattern id = "rol">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_rol">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>


<!--                    Instruction for ROR                          -->

<pattern id = "ror">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_ror">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>

<!--                     Instruction for SBC                         -->

<pattern id = "sbc">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_sbc">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fa"/>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fb"/>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>


<!--                     Instruction for LSL with constant                -->

<!-- <pattern id = "lsl"> -->
<!--  <node id = "CALLI4">  -->
<!--   <or> -->
<!--    <pinst id = "CALLF4" arity = "1"/> -->
<!--    <pinst id = "CALLI4" arity = "1"/> -->
<!--    <pinst id = "CALLU4" arity = "1"/> -->
<!--    <pinst id = "CALLP4" arity = "1"/>  -->
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
<!--   </or> -->
<!--    <kid nr = "0" id = "call_lsl"> -->
<!--     <node> -->
<!--      <or> -->  
<!--       <pinst id = "ADDRFP4" arity = "0"/> -->
<!--       <pinst id = "ADDRGP4" arity = "0"/> -->
<!--       <pinst id = "ADDRLP4" arity = "0"/> -->
<!--      </or> -->
<!--     </node> -->
<!--    </kid> -->
<!--  </node> -->
<!--  <node id = "arg1"> -->
<!--   <or> -->
<!--    <pinst id = "ARGF4" arity = "1"/> -->
<!--    <pinst id = "ARGI4" arity = "1"/> -->
<!--    <pinst id = "ARGU4" arity = "1"/> -->
<!--    <pinst id = "ARGP4" arity = "1"/> -->
<!--   <pinst id = "ARGB4" arity = "1"/>-->
<!--   </or> -->
<!--    <kid nr = "0" id = "Fa"> -->
<!--     <node> -->
<!--      <pinst id  = "CNSTI4" arity = "0"/> -->
<!--     </node> -->
<!--    </kid> -->
<!--  </node> -->
<!-- <link src = "arg1" dest = "CALLI4"/> -->
<!--  <node id = "argument"> -->
<!--   <or> -->
<!--    <pinst id = "ARGF4" arity = "1"/> -->
<!--    <pinst id = "ARGI4" arity = "1"/> -->
 <!--   <pinst id = "ARGU4" arity = "1"/> -->
<!--    <pinst id = "ARGP4" arity = "1"/> -->
<!--   <pinst id = "ARGB4" arity = "1"/>-->
<!--   </or> -->
 <!--   <kid nr = "0" id = "Fbb"> -->
 <!--    <node> -->
 <!--     <pinst id = "INDIRI4" arity = "1"/> -->
 <!--      <kid nr = "0" id = "Fb"/> -->
 <!--    </node> -->
 <!--   </kid> -->
<!--  </node> --> 
<!-- <link src = "argument" dest = "arg1"/> -->
<!-- </pattern> -->


<!--                    Instruction for SUBL                           -->

<pattern id = "SUBL">
   <node id = "assign" commutative = "yes">
    <or>
     <pinst id = "SUBF4" arity = "2"/>
     <pinst id = "SUBI4" arity = "2"/>
     <pinst id = "SUBU4" arity = "2"/>
<!--     <pinst id = "SUBP4" arity = "2"/> -->
    </or>
     <kid nr = "1" id = "Fa"/> 
     <kid nr = "0" id = "shift">
       <node>
        <or>
         <pinst id = "LSHI4" arity = "2"/>  
         <pinst id = "LSHU4" arity = "2"/>  
        </or>
         <kid nr = "0" id = "Fb"/>
         <kid nr = "1" id = "constant"/>
       </node>
     </kid>
   </node>
</pattern>

<!--                      Instruction for SUBR                         -->

<pattern id = "SUBR">
   <node id = "assign" commutative = "yes">
    <or>
     <pinst id = "SUBF4" arity = "2"/>
     <pinst id = "SUBI4" arity = "2"/>
     <pinst id = "SUBU4" arity = "2"/>
<!--     <pinst id = "SUBP4" arity = "2"/> -->
    </or>
     <kid nr = "1" id = "Fa"/> 
     <kid nr = "0" id = "shift">
       <node>
        <or>
         <pinst id = "DIVF4" arity = "2"/>  
         <pinst id = "DIVI4" arity = "2"/>  
         <pinst id = "DIVU4" arity = "2"/>  
        </or>
         <kid nr = "0" id = "Fb"/>
         <kid nr = "1" id = "constant"/>
       </node>
     </kid>
   </node>
</pattern>

<!--                           Instruction for TFR                      -->

<pattern id = "tfr">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_tfr">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fa"/>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fb"/>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>

<!--                       Instruction for ASL                      -->

<pattern id = "asl">
 <node id = "CALLI4">
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_asl">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>

<!--           instruction ASL with test for other two cases         -->
<pattern id = "aslm">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_aslm"/>
 </node>
 <node id = "arg1">
   <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fd">
   </kid>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "arg2">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fs"/>
 </node>
<link src = "arg2" dest = "arg1"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fc"/>
 </node>
<link src = "argument" dest = "arg2"/>
</pattern>


<!--                       Instruction for ASR                      -->

<pattern id = "asr">
 <node id = "CALLI4">
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_asr">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>

<!--           instruction ASR with test for other two cases         -->
<pattern id = "asrm">
 <node id = "CALLI4"> 
  <or>
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/> 
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_asrm"/>
 </node>
 <node id = "arg1">
   <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fd">
   </kid>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "arg2">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fs"/>
 </node>
<link src = "arg2" dest = "arg1"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fc"/>
 </node>
<link src = "argument" dest = "arg2"/>
</pattern>

<!--               Some patterns for some special functionalities       -->

<pattern id = "assign">
 <node id = "ASGNI4">
  <pinst id = "ASGNI4" arity = "2"/>
   <kid nr = "0" id = "address"/>
   <kid nr = "1" id = "something"/>
    <!--
    <node>
     <pinst id = "CALLI4" arity = "1"/>
      <kid nr = "0" id = "F"/>
    </node>
   </kid>
   -->
 </node>
</pattern>

<!-- pattern for jump -->
 <pattern id = "jump">
  <node id = "jump2">
   <pinst id = "JUMPV" arity = "1"/>
    <kid nr = "0" id = "address"/>
  </node>
</pattern>

<!-- pattern for branch -->
 <pattern id = "branch">
  <node id = "jump2">
   <pinst id = "JUMPV" arity = "1"/>
    <kid nr = "0" id = "address"/>
  </node>
</pattern>

<!-- pattern for CALL -->
<pattern id = "callin">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or>
   <kid nr = "0" id = "call_func">
    <node>
     <or>
      <pinst id = "ADDRFP4" arity = "0"/>
      <pinst id = "ADDRGP4" arity = "0"/>
      <pinst id = "ADDRLP4" arity = "0"/>
     </or>
    </node>
   </kid>
 </node>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "accummulate"/>
 </node>
<link src = "argument" dest = "CALLI4"/>
</pattern>

<pattern id = "max">
 <node id = "CALLI4">
  <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_max">
    <node>
     <pinst id = "ADDRGP4" arity = "0"/>
    </node>
   </kid>
 </node>
 <node id = "arg1">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fa"/>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "argument">
  <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
    <kid nr = "0" id = "Fb"/>
 </node>
<link src = "argument" dest = "arg1"/>
</pattern>


  <pattern id = "JEQ">
   <node id = "JEQ">
      <or>
          <pinst id = "EQF4" arity = "2"/>
 	 <pinst id = "EQI4" arity = "2"/>
 	 <pinst id = "EQU4" arity = "2"/>
       </or>
       <kid nr = "0" id = "0"/>
       <kid nr = "1" id = "1"/>
    </node> 
    </pattern>  



<pattern id = "macr">
 <node id = "CALLI4"> 
 <or> 
   <pinst id = "CALLF4" arity = "1"/>
   <pinst id = "CALLI4" arity = "1"/>
   <pinst id = "CALLU4" arity = "1"/>
   <pinst id = "CALLP4" arity = "1"/>
<!--   <pinst id = "CALLV4" arity = "1"/> -->
<!--   <pinst id = "CALLB4" arity = "1"/> -->
  </or> 
   <kid nr = "0" id = "call_macr"/>
 </node>
 <node id = "arg1">
 <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fd"/>
 </node>
<link src = "arg1" dest = "CALLI4"/>
 <node id = "arg2">
 <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fc"/>
 </node>
<link src = "arg2" dest = "arg1"/>
 <node id = "argument">
 <or>
   <pinst id = "ARGF4" arity = "1"/>
   <pinst id = "ARGI4" arity = "1"/>
   <pinst id = "ARGU4" arity = "1"/>
   <pinst id = "ARGP4" arity = "1"/>
<!--   <pinst id = "ARGB4" arity = "1"/>-->
  </or>
   <kid nr = "0" id = "Fs"/>
 </node>
<link src = "argument" dest = "arg2"/>
</pattern>


</patterns>

<transfer>


  <target id = "cnsttomem" src1 = "Constant" dest1 = "MemY">
  <latency l = "1"/>
  <cycle_matrix execute = "1"/>
  <format>move #{src1},{dest1} ;CMTransfer</format>
  </target>

  <target id = "cnsttomem" src1 = "Constant" dest1 = "accum">
  <latency l = "1"/>
  <cycle_matrix execute = "2"/>
  <format>move #{src1},{dest1} ;CATransfer</format>
  </target>

  <target id = "Memtoaccum" src1 = "MemY" dest1 = "accum">
  <latency l = "1"/>
  <cycle_matrix execute = "1"/>
  <format>move {src1},{dest1} ;MATransfer</format>
  </target>

  <target id = "Ctoadd" src1 = "Gsymbol" dest1 = "Rn">
  <latency l = "3"/>
  <cycle_matrix execute = "3"/>
  <format>move Y:{src1},{dest1} ;GRTransfer</format>
  </target>

  <target id = "cnsttomem" src1 = "Gsymbol" dest1 = "accum">
  <latency l = "1"/>
  <cycle_matrix execute = "2"/>
  <format>move Y:{src1},{dest1} ;GATransfer</format>
  </target>

  <target id = "Ctoadd" src1 = "Gsymbol" dest1 = "Rn">
  <latency l = "3"/>
  <cycle_matrix execute = "3"/>
  <format>move Y:{src1},{dest1} ;GRTransfer</format>
  </target>

  <target id = "cnsttomem" src1 = "Constant" dest1 = "MemY">
  <latency l = "1"/>
  <cycle_matrix execute = "1"/>
  <format>move #{src1},{dest1} ;CMTransfer</format>
  </target>


  <target id = "Gtomemory" src1 = "Gsymbol" dest1 = "MemY">
  <latency l = "1"/>
  <cycle_matrix execute = "1"/>
  <format>move Y:{src1},{dest1} ;GMTransfer</format>
  </target>

</transfer>





</architecture>
