Skip to content

Commit 7d9e5f4

Browse files
committed
AArch64 asm clobbers: recognize more register names
Wn as alias for Xn (integer register) Vn Qn Sn Hn Bn as aliases for Dn (floating-point/vector register) Fixes: #569
1 parent 7b1f02b commit 7d9e5f4

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

aarch64/Machregs.v

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,68 @@ Definition register_names :=
119119
:: ("D28", F28) :: ("D29", F29) :: ("D30", F30) :: ("D31", F31)
120120
:: nil.
121121

122+
Definition register_aliases :=
123+
("W0", R0) :: ("W1", R1) :: ("W2", R2) :: ("W3", R3)
124+
:: ("W4", R4) :: ("W5", R5) :: ("W6", R6) :: ("W7", R7)
125+
:: ("W8", R8) :: ("W9", R9) :: ("W10", R10) :: ("W11", R11)
126+
:: ("W12", R12) :: ("W13", R13) :: ("W14", R14) :: ("W15", R15)
127+
:: ("W17", R17) :: ("W19", R19)
128+
:: ("W20", R20) :: ("W21", R21) :: ("W22", R22) :: ("W23", R23)
129+
:: ("W24", R24) :: ("W25", R25) :: ("W26", R26) :: ("W27", R27)
130+
:: ("W28", R28) :: ("W29", R29)
131+
:: ("V0", F0) :: ("V1", F1) :: ("V2", F2) :: ("V3", F3)
132+
:: ("V4", F4) :: ("V5", F5) :: ("V6", F6) :: ("V7", F7)
133+
:: ("V8", F8) :: ("V9", F9) :: ("V10", F10) :: ("V11", F11)
134+
:: ("V12", F12) :: ("V13", F13) :: ("V14", F14) :: ("V15", F15)
135+
:: ("V16", F16) :: ("V17", F17) :: ("V18", F18) :: ("V19", F19)
136+
:: ("V20", F20) :: ("V21", F21) :: ("V22", F22) :: ("V23", F23)
137+
:: ("V24", F24) :: ("V25", F25) :: ("V26", F26) :: ("V27", F27)
138+
:: ("V28", F28) :: ("V29", F29) :: ("V30", F30) :: ("V31", F31)
139+
:: ("Q0", F0) :: ("Q1", F1) :: ("Q2", F2) :: ("Q3", F3)
140+
:: ("Q4", F4) :: ("Q5", F5) :: ("Q6", F6) :: ("Q7", F7)
141+
:: ("Q8", F8) :: ("Q9", F9) :: ("Q10", F10) :: ("Q11", F11)
142+
:: ("Q12", F12) :: ("Q13", F13) :: ("Q14", F14) :: ("Q15", F15)
143+
:: ("Q16", F16) :: ("Q17", F17) :: ("Q18", F18) :: ("Q19", F19)
144+
:: ("Q20", F20) :: ("Q21", F21) :: ("Q22", F22) :: ("Q23", F23)
145+
:: ("Q24", F24) :: ("Q25", F25) :: ("Q26", F26) :: ("Q27", F27)
146+
:: ("Q28", F28) :: ("Q29", F29) :: ("Q30", F30) :: ("Q31", F31)
147+
:: ("S0", F0) :: ("S1", F1) :: ("S2", F2) :: ("S3", F3)
148+
:: ("S4", F4) :: ("S5", F5) :: ("S6", F6) :: ("S7", F7)
149+
:: ("S8", F8) :: ("S9", F9) :: ("S10", F10) :: ("S11", F11)
150+
:: ("S12", F12) :: ("S13", F13) :: ("S14", F14) :: ("S15", F15)
151+
:: ("S16", F16) :: ("S17", F17) :: ("S18", F18) :: ("S19", F19)
152+
:: ("S20", F20) :: ("S21", F21) :: ("S22", F22) :: ("S23", F23)
153+
:: ("S24", F24) :: ("S25", F25) :: ("S26", F26) :: ("S27", F27)
154+
:: ("S28", F28) :: ("S29", F29) :: ("S30", F30) :: ("S31", F31)
155+
:: ("H0", F0) :: ("H1", F1) :: ("H2", F2) :: ("H3", F3)
156+
:: ("H4", F4) :: ("H5", F5) :: ("H6", F6) :: ("H7", F7)
157+
:: ("H8", F8) :: ("H9", F9) :: ("H10", F10) :: ("H11", F11)
158+
:: ("H12", F12) :: ("H13", F13) :: ("H14", F14) :: ("H15", F15)
159+
:: ("H16", F16) :: ("H17", F17) :: ("H18", F18) :: ("H19", F19)
160+
:: ("H20", F20) :: ("H21", F21) :: ("H22", F22) :: ("H23", F23)
161+
:: ("H24", F24) :: ("H25", F25) :: ("H26", F26) :: ("H27", F27)
162+
:: ("H28", F28) :: ("H29", F29) :: ("H30", F30) :: ("H31", F31)
163+
:: ("B0", F0) :: ("B1", F1) :: ("B2", F2) :: ("B3", F3)
164+
:: ("B4", F4) :: ("B5", F5) :: ("B6", F6) :: ("B7", F7)
165+
:: ("B8", F8) :: ("B9", F9) :: ("B10", F10) :: ("B11", F11)
166+
:: ("B12", F12) :: ("B13", F13) :: ("B14", F14) :: ("B15", F15)
167+
:: ("B16", F16) :: ("B17", F17) :: ("B18", F18) :: ("B19", F19)
168+
:: ("B20", F20) :: ("B21", F21) :: ("B22", F22) :: ("B23", F23)
169+
:: ("B24", F24) :: ("B25", F25) :: ("B26", F26) :: ("B27", F27)
170+
:: ("B28", F28) :: ("B29", F29) :: ("B30", F30) :: ("B31", F31)
171+
:: nil.
172+
122173
Definition register_by_name (s: string) : option mreg :=
123174
let fix assoc (l: list (string * mreg)) : option mreg :=
124175
match l with
125176
| nil => None
126177
| (s1, r1) :: l' => if string_dec s s1 then Some r1 else assoc l'
127178
end
128-
in assoc register_names.
179+
in
180+
match assoc register_names with
181+
| Some res => Some res
182+
| None => assoc register_aliases
183+
end.
129184

130185
(** ** Destroyed registers, preferred registers *)
131186

aarch64/Machregsaux.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@
1313
(** Auxiliary functions on machine registers *)
1414

1515
let is_scratch_register s =
16-
s = "X16" || s = "x16" || s = "X30" || s = "x30"
16+
s = "X16" || s = "x16" || s = "W16" || s = "w16" ||
17+
s = "X30" || s = "x30" || s = "W30" || s = "w30"

0 commit comments

Comments
 (0)