File tree Expand file tree Collapse file tree 2 files changed +31
-66
lines changed Expand file tree Collapse file tree 2 files changed +31
-66
lines changed Original file line number Diff line number Diff line change @@ -186,8 +186,8 @@ void Compiler::unwindPushPopMaskCFI(regMaskTP regMask, bool isFloat)
186186{
187187 regMaskTP regBit = isFloat ? genRegMask (REG_FP_FIRST) : 1 ;
188188
189- for ( regNumber regNum = isFloat ? REG_FP_FIRST : REG_FIRST; regNum < REG_COUNT ;
190- regNum = REG_NEXT (regNum), regBit <<= 1 )
189+ regNumber regNum = isFloat ? REG_FP_FIRST : REG_FIRST;
190+ for (; regNum < REG_COUNT; )
191191 {
192192 if (regBit > regMask)
193193 {
@@ -198,6 +198,19 @@ void Compiler::unwindPushPopMaskCFI(regMaskTP regMask, bool isFloat)
198198 {
199199 unwindPushPopCFI (regNum);
200200 }
201+
202+ #if TARGET_ARM
203+ // JIT for ARM emit local variables in S0-S31 registers,
204+ // which cannot be emitted to DWARF when using LLVM,
205+ // because LLVM only know about D0-D31.
206+ // As such pairs Sx,Sx+1 are referenced as D0-D15 registers in DWARF
207+ // For that we process registers in pairs.
208+ regNum = isFloat ? REG_NEXT (REG_NEXT (regNum)) : REG_NEXT (regNum);
209+ regBit <<= isFloat ? 2 : 1 ;
210+ #else
211+ regNum = REG_NEXT (regNum);
212+ regBit <<= 1 ;
213+ #endif
201214 }
202215}
203216
Original file line number Diff line number Diff line change @@ -71,100 +71,52 @@ short Compiler::mapRegNumToDwarfReg(regNumber reg)
7171 dwarfReg = 15 ;
7272 break ;
7373 case REG_F0:
74- dwarfReg = 64 ;
75- break ;
76- case REG_F1:
77- dwarfReg = 65 ;
74+ dwarfReg = 256 ;
7875 break ;
7976 case REG_F2:
80- dwarfReg = 66 ;
81- break ;
82- case REG_F3:
83- dwarfReg = 67 ;
77+ dwarfReg = 257 ;
8478 break ;
8579 case REG_F4:
86- dwarfReg = 68 ;
87- break ;
88- case REG_F5:
89- dwarfReg = 69 ;
80+ dwarfReg = 258 ;
9081 break ;
9182 case REG_F6:
92- dwarfReg = 70 ;
93- break ;
94- case REG_F7:
95- dwarfReg = 71 ;
83+ dwarfReg = 259 ;
9684 break ;
9785 case REG_F8:
98- dwarfReg = 72 ;
99- break ;
100- case REG_F9:
101- dwarfReg = 73 ;
86+ dwarfReg = 260 ;
10287 break ;
10388 case REG_F10:
104- dwarfReg = 74 ;
105- break ;
106- case REG_F11:
107- dwarfReg = 75 ;
89+ dwarfReg = 261 ;
10890 break ;
10991 case REG_F12:
110- dwarfReg = 76 ;
111- break ;
112- case REG_F13:
113- dwarfReg = 77 ;
92+ dwarfReg = 262 ;
11493 break ;
11594 case REG_F14:
116- dwarfReg = 78 ;
117- break ;
118- case REG_F15:
119- dwarfReg = 79 ;
95+ dwarfReg = 263 ;
12096 break ;
12197 case REG_F16:
122- dwarfReg = 80 ;
123- break ;
124- case REG_F17:
125- dwarfReg = 81 ;
98+ dwarfReg = 264 ;
12699 break ;
127100 case REG_F18:
128- dwarfReg = 82 ;
129- break ;
130- case REG_F19:
131- dwarfReg = 83 ;
101+ dwarfReg = 265 ;
132102 break ;
133103 case REG_F20:
134- dwarfReg = 84 ;
135- break ;
136- case REG_F21:
137- dwarfReg = 85 ;
104+ dwarfReg = 266 ;
138105 break ;
139106 case REG_F22:
140- dwarfReg = 86 ;
141- break ;
142- case REG_F23:
143- dwarfReg = 87 ;
107+ dwarfReg = 267 ;
144108 break ;
145109 case REG_F24:
146- dwarfReg = 88 ;
147- break ;
148- case REG_F25:
149- dwarfReg = 89 ;
110+ dwarfReg = 268 ;
150111 break ;
151112 case REG_F26:
152- dwarfReg = 90 ;
153- break ;
154- case REG_F27:
155- dwarfReg = 91 ;
113+ dwarfReg = 269 ;
156114 break ;
157115 case REG_F28:
158- dwarfReg = 92 ;
159- break ;
160- case REG_F29:
161- dwarfReg = 93 ;
116+ dwarfReg = 270 ;
162117 break ;
163118 case REG_F30:
164- dwarfReg = 94 ;
165- break ;
166- case REG_F31:
167- dwarfReg = 95 ;
119+ dwarfReg = 271 ;
168120 break ;
169121 default :
170122 noway_assert (!" unexpected REG_NUM" );
You can’t perform that action at this time.
0 commit comments