mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +02:00
Merge remote-tracking branch
'origin/GP-5192_ghintern_aarch64_aapcs_fixes--SQUASHED' (Closes #8016)
This commit is contained in:
commit
32abab0a3d
2 changed files with 132 additions and 20 deletions
|
@ -125,11 +125,20 @@
|
|||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<goto_stack/> <!-- Don't consume general purpose registers -->
|
||||
<consume_extra storage="float"/> <!-- Once the stack has been used, don't go back to registers -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct" minsize="17"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union" minsize="17"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
|
@ -147,16 +156,37 @@
|
|||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" extension="zero">
|
||||
<register name="x0"/>
|
||||
</pentry>
|
||||
<pentry minsize="9" maxsize="16" extension="zero">
|
||||
<addr space="join" piece1="x1" piece2="x0"/>
|
||||
<pentry minsize="1" maxsize="8" extension="zero">
|
||||
<register name="x1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any" minsize="17"/>
|
||||
<hidden_return voidlock="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="x19"/>
|
||||
|
|
|
@ -74,29 +74,32 @@
|
|||
<default_proto>
|
||||
<prototype name="__cdecl" extrapop="0" stackshift="0">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d0"/>
|
||||
<pentry minsize="8" maxsize="8" storage="hiddenret">
|
||||
<register name="x8"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d1"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d2"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d3"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d4"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d5"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q4"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d6"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q5"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d7"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q6"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q7"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" extension="zero">
|
||||
<register name="x0"/>
|
||||
|
@ -125,14 +128,93 @@
|
|||
<pentry minsize="1" maxsize="500" align="8">
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
<!-- Variadic functions do not use floating-point registers -->
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<varargs/>
|
||||
<join align="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<varargs/>
|
||||
<goto_stack/>
|
||||
</rule>
|
||||
<!-- Homogeneous float aggregates become regular structs in variadic calls -->
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate" maxsize="16"/>
|
||||
<varargs/>
|
||||
<join align="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate" minsize="17"/>
|
||||
<varargs/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<goto_stack/> <!-- Don't consume general purpose registers -->
|
||||
<consume_extra storage="float"/> <!-- Once the stack has been used, don't go back to registers -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<goto_stack/> <!-- Don't consume general purpose registers -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct" minsize="17"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union" minsize="17"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join align="true"/> <!-- Chunk from general purpose registers -->
|
||||
</rule>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="d0"/>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="16" storage="float">
|
||||
<register name="q3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" extension="zero">
|
||||
<register name="x0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" extension="zero">
|
||||
<register name="x1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any" minsize="17"/>
|
||||
<hidden_return voidlock="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="x19"/>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue