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>
|
<rule>
|
||||||
<datatype name="homogeneous-float-aggregate"/>
|
<datatype name="homogeneous-float-aggregate"/>
|
||||||
<join_per_primitive storage="float"/>
|
<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>
|
||||||
<rule>
|
<rule>
|
||||||
<datatype name="struct" minsize="17"/>
|
<datatype name="struct" minsize="17"/>
|
||||||
<convert_to_ptr/>
|
<convert_to_ptr/>
|
||||||
</rule>
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<datatype name="union" minsize="17"/>
|
||||||
|
<convert_to_ptr/>
|
||||||
|
</rule>
|
||||||
<rule>
|
<rule>
|
||||||
<datatype name="float"/>
|
<datatype name="float"/>
|
||||||
<consume storage="float"/>
|
<consume storage="float"/>
|
||||||
|
@ -147,16 +156,37 @@
|
||||||
<pentry minsize="1" maxsize="16" storage="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="q0"/>
|
<register name="q0"/>
|
||||||
</pentry>
|
</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">
|
<pentry minsize="1" maxsize="8" extension="zero">
|
||||||
<register name="x0"/>
|
<register name="x0"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="9" maxsize="16" extension="zero">
|
<pentry minsize="1" maxsize="8" extension="zero">
|
||||||
<addr space="join" piece1="x1" piece2="x0"/>
|
<register name="x1"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
|
<rule>
|
||||||
|
<datatype name="homogeneous-float-aggregate"/>
|
||||||
|
<join_per_primitive storage="float"/>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<datatype name="float"/>
|
||||||
|
<consume storage="float"/>
|
||||||
|
</rule>
|
||||||
<rule>
|
<rule>
|
||||||
<datatype name="any" minsize="17"/>
|
<datatype name="any" minsize="17"/>
|
||||||
<hidden_return voidlock="true"/>
|
<hidden_return voidlock="true"/>
|
||||||
</rule>
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<datatype name="any"/>
|
||||||
|
<join/>
|
||||||
|
</rule>
|
||||||
</output>
|
</output>
|
||||||
<unaffected>
|
<unaffected>
|
||||||
<register name="x19"/>
|
<register name="x19"/>
|
||||||
|
|
|
@ -74,29 +74,32 @@
|
||||||
<default_proto>
|
<default_proto>
|
||||||
<prototype name="__cdecl" extrapop="0" stackshift="0">
|
<prototype name="__cdecl" extrapop="0" stackshift="0">
|
||||||
<input>
|
<input>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="8" maxsize="8" storage="hiddenret">
|
||||||
<register name="d0"/>
|
<register name="x8"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d1"/>
|
<register name="q0"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d2"/>
|
<register name="q1"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d3"/>
|
<register name="q2"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d4"/>
|
<register name="q3"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d5"/>
|
<register name="q4"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d6"/>
|
<register name="q5"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d7"/>
|
<register name="q6"/>
|
||||||
|
</pentry>
|
||||||
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
|
<register name="q7"/>
|
||||||
</pentry>
|
</pentry>
|
||||||
<pentry minsize="1" maxsize="8" extension="zero">
|
<pentry minsize="1" maxsize="8" extension="zero">
|
||||||
<register name="x0"/>
|
<register name="x0"/>
|
||||||
|
@ -125,14 +128,93 @@
|
||||||
<pentry minsize="1" maxsize="500" align="8">
|
<pentry minsize="1" maxsize="500" align="8">
|
||||||
<addr offset="0" space="stack"/>
|
<addr offset="0" space="stack"/>
|
||||||
</pentry>
|
</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>
|
</input>
|
||||||
<output>
|
<output>
|
||||||
<pentry minsize="1" maxsize="8" metatype="float">
|
<pentry minsize="1" maxsize="16" storage="float">
|
||||||
<register name="d0"/>
|
<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>
|
||||||
<pentry minsize="1" maxsize="8" extension="zero">
|
<pentry minsize="1" maxsize="8" extension="zero">
|
||||||
<register name="x0"/>
|
<register name="x0"/>
|
||||||
</pentry>
|
</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>
|
</output>
|
||||||
<unaffected>
|
<unaffected>
|
||||||
<register name="x19"/>
|
<register name="x19"/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue