Mercurial > hg > truffle
comparison src/cpu/sparc/vm/sparc.ad @ 1007:1ce3281a8e93
6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
Summary: Fix problem with the double register encodings in sparc.ad
Reviewed-by: never, jrose
Contributed-by: volker.simonis@gmail.com
author | kvn |
---|---|
date | Tue, 06 Oct 2009 10:15:38 -0700 |
parents | 62001a362ce9 |
children | d40f03b57795 |
comparison
equal
deleted
inserted
replaced
1006:dcf03e02b020 | 1007:1ce3281a8e93 |
---|---|
191 // with the macroassembler, using reg_to_DoubleFloatRegister_object(). | 191 // with the macroassembler, using reg_to_DoubleFloatRegister_object(). |
192 // 255 is a flag meaning "don't go here". | 192 // 255 is a flag meaning "don't go here". |
193 // I believe we can't handle callee-save doubles D32 and up until | 193 // I believe we can't handle callee-save doubles D32 and up until |
194 // the place in the sparc stack crawler that asserts on the 255 is | 194 // the place in the sparc stack crawler that asserts on the 255 is |
195 // fixed up. | 195 // fixed up. |
196 reg_def R_D32x(SOC, SOC, Op_RegD,255, F32->as_VMReg()); | 196 reg_def R_D32 (SOC, SOC, Op_RegD, 1, F32->as_VMReg()); |
197 reg_def R_D32 (SOC, SOC, Op_RegD, 1, F32->as_VMReg()->next()); | 197 reg_def R_D32x(SOC, SOC, Op_RegD,255, F32->as_VMReg()->next()); |
198 reg_def R_D34x(SOC, SOC, Op_RegD,255, F34->as_VMReg()); | 198 reg_def R_D34 (SOC, SOC, Op_RegD, 3, F34->as_VMReg()); |
199 reg_def R_D34 (SOC, SOC, Op_RegD, 3, F34->as_VMReg()->next()); | 199 reg_def R_D34x(SOC, SOC, Op_RegD,255, F34->as_VMReg()->next()); |
200 reg_def R_D36x(SOC, SOC, Op_RegD,255, F36->as_VMReg()); | 200 reg_def R_D36 (SOC, SOC, Op_RegD, 5, F36->as_VMReg()); |
201 reg_def R_D36 (SOC, SOC, Op_RegD, 5, F36->as_VMReg()->next()); | 201 reg_def R_D36x(SOC, SOC, Op_RegD,255, F36->as_VMReg()->next()); |
202 reg_def R_D38x(SOC, SOC, Op_RegD,255, F38->as_VMReg()); | 202 reg_def R_D38 (SOC, SOC, Op_RegD, 7, F38->as_VMReg()); |
203 reg_def R_D38 (SOC, SOC, Op_RegD, 7, F38->as_VMReg()->next()); | 203 reg_def R_D38x(SOC, SOC, Op_RegD,255, F38->as_VMReg()->next()); |
204 reg_def R_D40x(SOC, SOC, Op_RegD,255, F40->as_VMReg()); | 204 reg_def R_D40 (SOC, SOC, Op_RegD, 9, F40->as_VMReg()); |
205 reg_def R_D40 (SOC, SOC, Op_RegD, 9, F40->as_VMReg()->next()); | 205 reg_def R_D40x(SOC, SOC, Op_RegD,255, F40->as_VMReg()->next()); |
206 reg_def R_D42x(SOC, SOC, Op_RegD,255, F42->as_VMReg()); | 206 reg_def R_D42 (SOC, SOC, Op_RegD, 11, F42->as_VMReg()); |
207 reg_def R_D42 (SOC, SOC, Op_RegD, 11, F42->as_VMReg()->next()); | 207 reg_def R_D42x(SOC, SOC, Op_RegD,255, F42->as_VMReg()->next()); |
208 reg_def R_D44x(SOC, SOC, Op_RegD,255, F44->as_VMReg()); | 208 reg_def R_D44 (SOC, SOC, Op_RegD, 13, F44->as_VMReg()); |
209 reg_def R_D44 (SOC, SOC, Op_RegD, 13, F44->as_VMReg()->next()); | 209 reg_def R_D44x(SOC, SOC, Op_RegD,255, F44->as_VMReg()->next()); |
210 reg_def R_D46x(SOC, SOC, Op_RegD,255, F46->as_VMReg()); | 210 reg_def R_D46 (SOC, SOC, Op_RegD, 15, F46->as_VMReg()); |
211 reg_def R_D46 (SOC, SOC, Op_RegD, 15, F46->as_VMReg()->next()); | 211 reg_def R_D46x(SOC, SOC, Op_RegD,255, F46->as_VMReg()->next()); |
212 reg_def R_D48x(SOC, SOC, Op_RegD,255, F48->as_VMReg()); | 212 reg_def R_D48 (SOC, SOC, Op_RegD, 17, F48->as_VMReg()); |
213 reg_def R_D48 (SOC, SOC, Op_RegD, 17, F48->as_VMReg()->next()); | 213 reg_def R_D48x(SOC, SOC, Op_RegD,255, F48->as_VMReg()->next()); |
214 reg_def R_D50x(SOC, SOC, Op_RegD,255, F50->as_VMReg()); | 214 reg_def R_D50 (SOC, SOC, Op_RegD, 19, F50->as_VMReg()); |
215 reg_def R_D50 (SOC, SOC, Op_RegD, 19, F50->as_VMReg()->next()); | 215 reg_def R_D50x(SOC, SOC, Op_RegD,255, F50->as_VMReg()->next()); |
216 reg_def R_D52x(SOC, SOC, Op_RegD,255, F52->as_VMReg()); | 216 reg_def R_D52 (SOC, SOC, Op_RegD, 21, F52->as_VMReg()); |
217 reg_def R_D52 (SOC, SOC, Op_RegD, 21, F52->as_VMReg()->next()); | 217 reg_def R_D52x(SOC, SOC, Op_RegD,255, F52->as_VMReg()->next()); |
218 reg_def R_D54x(SOC, SOC, Op_RegD,255, F54->as_VMReg()); | 218 reg_def R_D54 (SOC, SOC, Op_RegD, 23, F54->as_VMReg()); |
219 reg_def R_D54 (SOC, SOC, Op_RegD, 23, F54->as_VMReg()->next()); | 219 reg_def R_D54x(SOC, SOC, Op_RegD,255, F54->as_VMReg()->next()); |
220 reg_def R_D56x(SOC, SOC, Op_RegD,255, F56->as_VMReg()); | 220 reg_def R_D56 (SOC, SOC, Op_RegD, 25, F56->as_VMReg()); |
221 reg_def R_D56 (SOC, SOC, Op_RegD, 25, F56->as_VMReg()->next()); | 221 reg_def R_D56x(SOC, SOC, Op_RegD,255, F56->as_VMReg()->next()); |
222 reg_def R_D58x(SOC, SOC, Op_RegD,255, F58->as_VMReg()); | 222 reg_def R_D58 (SOC, SOC, Op_RegD, 27, F58->as_VMReg()); |
223 reg_def R_D58 (SOC, SOC, Op_RegD, 27, F58->as_VMReg()->next()); | 223 reg_def R_D58x(SOC, SOC, Op_RegD,255, F58->as_VMReg()->next()); |
224 reg_def R_D60x(SOC, SOC, Op_RegD,255, F60->as_VMReg()); | 224 reg_def R_D60 (SOC, SOC, Op_RegD, 29, F60->as_VMReg()); |
225 reg_def R_D60 (SOC, SOC, Op_RegD, 29, F60->as_VMReg()->next()); | 225 reg_def R_D60x(SOC, SOC, Op_RegD,255, F60->as_VMReg()->next()); |
226 reg_def R_D62x(SOC, SOC, Op_RegD,255, F62->as_VMReg()); | 226 reg_def R_D62 (SOC, SOC, Op_RegD, 31, F62->as_VMReg()); |
227 reg_def R_D62 (SOC, SOC, Op_RegD, 31, F62->as_VMReg()->next()); | 227 reg_def R_D62x(SOC, SOC, Op_RegD,255, F62->as_VMReg()->next()); |
228 | 228 |
229 | 229 |
230 // ---------------------------- | 230 // ---------------------------- |
231 // Special Registers | 231 // Special Registers |
232 // Condition Codes Flag Registers | 232 // Condition Codes Flag Registers |