mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +02:00
Merge remote-tracking branch 'origin/GP-5183_ghintern_x86_x64_cspecs--SQUASHED'
This commit is contained in:
commit
e14fede14f
3 changed files with 72 additions and 37 deletions
|
@ -129,42 +129,62 @@
|
||||||
</default_proto>
|
</default_proto>
|
||||||
<prototype name="MSABI" extrapop="8" stackshift="8">
|
<prototype name="MSABI" extrapop="8" stackshift="8">
|
||||||
<input pointermax="8">
|
<input pointermax="8">
|
||||||
<pentry minsize="4" maxsize="8" metatype="float">
|
<!-- Use same grouping setup as x86-64-win.cspec. If the nth general-purpose register is
|
||||||
<register name="XMM0_Qa"/>
|
consumed, consume the nth floating point register, and vice-versa -->
|
||||||
</pentry>
|
<group>
|
||||||
<pentry minsize="4" maxsize="8" metatype="float">
|
<pentry minsize="4" maxsize="8" metatype="float">
|
||||||
<register name="XMM1_Qa"/>
|
<register name="XMM0_Qa"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="4" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="8">
|
||||||
<register name="XMM2_Qa"/>
|
<register name="RCX"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="4" maxsize="8" metatype="float">
|
</group>
|
||||||
<register name="XMM3_Qa"/>
|
<group>
|
||||||
</pentry>
|
<pentry minsize="4" maxsize="8" metatype="float">
|
||||||
<pentry minsize="1" maxsize="8">
|
<register name="XMM1_Qa"/>
|
||||||
<register name="RCX"/>
|
</pentry>
|
||||||
</pentry>
|
<pentry minsize="1" maxsize="8">
|
||||||
<pentry minsize="1" maxsize="8">
|
<register name="RDX"/>
|
||||||
<register name="RDX"/>
|
</pentry>
|
||||||
</pentry>
|
</group>
|
||||||
<pentry minsize="1" maxsize="8">
|
<group>
|
||||||
<register name="R8"/>
|
<pentry minsize="4" maxsize="8" metatype="float">
|
||||||
</pentry>
|
<register name="XMM2_Qa"/>
|
||||||
<pentry minsize="1" maxsize="8">
|
</pentry>
|
||||||
<register name="R9"/>
|
<pentry minsize="1" maxsize="8">
|
||||||
</pentry>
|
<register name="R8"/>
|
||||||
<pentry minsize="1" maxsize="500" align="8">
|
</pentry>
|
||||||
<addr offset="40" space="stack"/>
|
</group>
|
||||||
</pentry>
|
<group>
|
||||||
</input>
|
<pentry minsize="4" maxsize="8" metatype="float">
|
||||||
<output>
|
<register name="XMM3_Qa"/>
|
||||||
<pentry minsize="4" maxsize="8" metatype="float">
|
</pentry>
|
||||||
<register name="XMM0_Qa"/>
|
<pentry minsize="1" maxsize="8">
|
||||||
</pentry>
|
<register name="R9"/>
|
||||||
<pentry minsize="1" maxsize="8">
|
</pentry>
|
||||||
<register name="RAX"/>
|
</group>
|
||||||
</pentry>
|
<pentry minsize="1" maxsize="500" align="8">
|
||||||
</output>
|
<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>
|
<unaffected>
|
||||||
<varnode space="ram" offset="0" size="8"/>
|
<varnode space="ram" offset="0" size="8"/>
|
||||||
<register name="RBX"/>
|
<register name="RBX"/>
|
||||||
|
|
|
@ -79,6 +79,11 @@
|
||||||
<pentry minsize="1" maxsize="500" align="8">
|
<pentry minsize="1" maxsize="500" align="8">
|
||||||
<addr offset="40" space="stack"/>
|
<addr offset="40" space="stack"/>
|
||||||
</pentry>
|
</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>
|
</input>
|
||||||
<output>
|
<output>
|
||||||
<pentry minsize="4" maxsize="8" metatype="float">
|
<pentry minsize="4" maxsize="8" metatype="float">
|
||||||
|
@ -87,6 +92,11 @@
|
||||||
<pentry minsize="1" maxsize="8">
|
<pentry minsize="1" maxsize="8">
|
||||||
<register name="RAX"/>
|
<register name="RAX"/>
|
||||||
</pentry>
|
</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>
|
</output>
|
||||||
<unaffected>
|
<unaffected>
|
||||||
<varnode space="ram" offset="0" size="8"/>
|
<varnode space="ram" offset="0" size="8"/>
|
||||||
|
|
|
@ -48,6 +48,11 @@
|
||||||
<pentry minsize="5" maxsize="8">
|
<pentry minsize="5" maxsize="8">
|
||||||
<addr space="join" piece1="EDX" piece2="EAX"/>
|
<addr space="join" piece1="EDX" piece2="EAX"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
|
<!-- Any struct type is returned by pointer, regardless of size -->
|
||||||
|
<rule>
|
||||||
|
<datatype name="struct"/>
|
||||||
|
<hidden_return/>
|
||||||
|
</rule>
|
||||||
</output>
|
</output>
|
||||||
<unaffected>
|
<unaffected>
|
||||||
<register name="ESP"/>
|
<register name="ESP"/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue