<?xml version="1.0" encoding="UTF-8"?>

<compiler_spec>
  <data_organization>
        <char_size value="1"/>
        <short_size value="2"/>
        <integer_size value="4"/>
        <pointer_size value="4"/>
        <long_size value="4"/>
        <long_long_size value="8"/>
        <float_size value="4" />
        <double_size value="8" />
        <long_double_size value="8" />
        <size_alignment_map>
			<entry size="1" alignment="1" />
			<entry size="2" alignment="2" />
			<entry size="4" alignment="4" />
			<entry size="8" alignment="8" />
		</size_alignment_map>
  </data_organization>

  <stackpointer register="sp" space="ram"/>
  <funcptr align="2"/>
  <global>
    <range space="ram"/>
    <range space="register" first="0x2000" last="0x2fff"/>
  </global>
  <returnaddress>
    <register name="ra"/>
  </returnaddress>
  <default_proto>
  <prototype name="__stdcall" extrapop="0" stackshift="0">
    <input>
      <pentry minsize="4" maxsize="8" metatype="float">
        <register name="f12_13"/>
      </pentry>
      <pentry minsize="4" maxsize="8" metatype="float">
        <register name="f14_15"/>
      </pentry>
      <pentry minsize="4" maxsize="8" metatype="float">
        <register name="f16_17"/>
      </pentry>
      <pentry minsize="4" maxsize="8" metatype="float">
        <register name="f18_19"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="a0"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="a1"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="a2"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="a3"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="t0"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="t1"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="t2"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="t3"/>
      </pentry>
      <pentry minsize="1" maxsize="500" align="4">
        <addr offset="0" space="stack"/>
      </pentry>
      <rule>
        <datatype name="homogeneous-float-aggregate" maxprimitives="1"/>
        <join_per_primitive storage="float"/>
      </rule>
      <rule>
        <datatype name="homogeneous-float-aggregate" maxprimitives="1"/>
        <goto_stack/>
      </rule>
      <rule>
        <datatype name="float"/>
        <consume storage="float"/>
      </rule>
      <rule>
        <datatype name="float"/>
        <goto_stack/>
      </rule>
      <rule>
        <datatype name="struct" minsize="5"/>
        <convert_to_ptr/>
      </rule>
      <rule>
        <datatype name="union" minsize="5"/>
        <convert_to_ptr/>
      </rule>
      <rule>
        <datatype name="any"/>
        <join align="true"/>
      </rule>
    </input>
    <output>
      <pentry minsize="1" maxsize="8" metatype="float">
        <register name="f0_1"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="v0"/>
      </pentry>
      <pentry minsize="1" maxsize="4">
        <register name="v1"/>
      </pentry>
      <rule>
        <datatype name="homogeneous-float-aggregate" maxprimitives="1"/>
        <join_per_primitive storage="float"/>
      </rule>
      <rule>
        <datatype name="float"/>
        <consume storage="float"/>
      </rule>
      <rule>
        <datatype name="any"/>
        <join/>
      </rule>
    </output>
    <unaffected>
      <register name="s0"/>
      <register name="s1"/>
      <register name="s2"/>
      <register name="s3"/>
      <register name="s4"/>
      <register name="s5"/>
      <register name="s6"/>
      <register name="s7"/>
      <register name="s8"/>
      <register name="sp"/>
      <register name="gp"/>
      <register name="f20"/>
      <register name="f22"/>
      <register name="f24"/>
      <register name="f26"/>
      <register name="f28"/>
      <register name="f30"/>
    </unaffected>
    <killedbycall>
      <register name="at"/>
      <register name="v0"/>
      <register name="v1"/>
      <register name="f0"/>
      <register name="f1"/>
    </killedbycall>
    <localrange>
      <range space="stack" first="0xfff0bdc0" last="0xffffffff"/>
      <range space="stack" first="0" last="15"/>  <!-- This is backup storage space for register params, but we treat as locals -->
    </localrange>
  </prototype>
  </default_proto>
    
</compiler_spec>
