Merge remote-tracking branch 'origin/GP-5183_ghintern_x86_x64_cspecs--SQUASHED'

This commit is contained in:
Ryan Kurtz 2025-02-06 07:11:36 -05:00
commit e14fede14f
3 changed files with 72 additions and 37 deletions

View file

@ -129,42 +129,62 @@
</default_proto>
<prototype name="MSABI" extrapop="8" stackshift="8">
<input pointermax="8">
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM0_Qa"/>
</pentry>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM1_Qa"/>
</pentry>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM2_Qa"/>
</pentry>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM3_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="RCX"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="RDX"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="R8"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="R9"/>
</pentry>
<pentry minsize="1" maxsize="500" align="8">
<addr offset="40" space="stack"/>
</pentry>
</input>
<output>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM0_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="RAX"/>
</pentry>
</output>
<!-- Use same grouping setup as x86-64-win.cspec. If the nth general-purpose register is
consumed, consume the nth floating point register, and vice-versa -->
<group>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM0_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="RCX"/>
</pentry>
</group>
<group>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM1_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="RDX"/>
</pentry>
</group>
<group>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM2_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="R8"/>
</pentry>
</group>
<group>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM3_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="R9"/>
</pentry>
</group>
<pentry minsize="1" maxsize="500" align="8">
<addr offset="40" space="stack"/>
</pentry>
<!-- only structs of size 8,16,32,64 bits can be packed to register -->
<rule>
<datatype name="struct" sizes="3,5,6,7"/>
<convert_to_ptr/>
</rule>
</input>
<output>
<pentry minsize="4" maxsize="8" metatype="float">
<register name="XMM0_Qa"/>
</pentry>
<pentry minsize="1" maxsize="8">
<register name="RAX"/>
</pentry>
<!-- only structs of size 8,16,32,64 bits can be returned via register -->
<rule>
<datatype name="struct" sizes="3,5,6,7"/>
<hidden_return/>
</rule>
</output>
<unaffected>
<varnode space="ram" offset="0" size="8"/>
<register name="RBX"/>

View file

@ -79,6 +79,11 @@
<pentry minsize="1" maxsize="500" align="8">
<addr offset="40" space="stack"/>
</pentry>
<!-- only structs of size 8,16,32,64 bits can be packed to register -->
<rule>
<datatype name="struct" sizes="3,5,6,7"/>
<convert_to_ptr/>
</rule>
</input>
<output>
<pentry minsize="4" maxsize="8" metatype="float">
@ -87,6 +92,11 @@
<pentry minsize="1" maxsize="8">
<register name="RAX"/>
</pentry>
<!-- only structs of size 8,16,32,64 bits can be returned via register -->
<rule>
<datatype name="struct" sizes="3,5,6,7"/>
<hidden_return/>
</rule>
</output>
<unaffected>
<varnode space="ram" offset="0" size="8"/>

View file

@ -48,6 +48,11 @@
<pentry minsize="5" maxsize="8">
<addr space="join" piece1="EDX" piece2="EAX"/>
</pentry>
<!-- Any struct type is returned by pointer, regardless of size -->
<rule>
<datatype name="struct"/>
<hidden_return/>
</rule>
</output>
<unaffected>
<register name="ESP"/>