comparison src/cpu/ppc/vm/templateTable_ppc_64.cpp @ 17917:63c5920a038d

8042309: Some bugfixes for the ppc64 port. Reviewed-by: kvn
author goetz
date Fri, 02 May 2014 14:53:06 +0200
parents fd1b9f02cc91
children b384ba33c9a0
comparison
equal deleted inserted replaced
17916:34862ced4a87 17917:63c5920a038d
62 bool precise, 62 bool precise,
63 bool check_null) { 63 bool check_null) {
64 assert_different_registers(Rtmp1, Rtmp2, Rtmp3, Rval, Rbase); 64 assert_different_registers(Rtmp1, Rtmp2, Rtmp3, Rval, Rbase);
65 65
66 switch (barrier) { 66 switch (barrier) {
67 #ifndef SERIALGC 67 #if INCLUDE_ALL_GCS
68 case BarrierSet::G1SATBCT: 68 case BarrierSet::G1SATBCT:
69 case BarrierSet::G1SATBCTLogging: 69 case BarrierSet::G1SATBCTLogging:
70 { 70 {
71 // Load and record the previous value. 71 // Load and record the previous value.
72 __ g1_write_barrier_pre(Rbase, offset, 72 __ g1_write_barrier_pre(Rbase, offset,
102 } 102 }
103 } 103 }
104 __ bind(Ldone); 104 __ bind(Ldone);
105 } 105 }
106 break; 106 break;
107 #endif // SERIALGC 107 #endif // INCLUDE_ALL_GCS
108 case BarrierSet::CardTableModRef: 108 case BarrierSet::CardTableModRef:
109 case BarrierSet::CardTableExtension: 109 case BarrierSet::CardTableExtension:
110 { 110 {
111 Label Lnull, Ldone; 111 Label Lnull, Ldone;
112 if (Rval != noreg) { 112 if (Rval != noreg) {
257 static float one = 1.0; 257 static float one = 1.0;
258 static float two = 2.0; 258 static float two = 2.0;
259 switch (value) { 259 switch (value) {
260 default: ShouldNotReachHere(); 260 default: ShouldNotReachHere();
261 case 0: { 261 case 0: {
262 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0); 262 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0, true);
263 __ lfs(F15_ftos, simm16_offset, R11_scratch1); 263 __ lfs(F15_ftos, simm16_offset, R11_scratch1);
264 break; 264 break;
265 } 265 }
266 case 1: { 266 case 1: {
267 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0); 267 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0, true);
268 __ lfs(F15_ftos, simm16_offset, R11_scratch1); 268 __ lfs(F15_ftos, simm16_offset, R11_scratch1);
269 break; 269 break;
270 } 270 }
271 case 2: { 271 case 2: {
272 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&two, R0); 272 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&two, R0, true);
273 __ lfs(F15_ftos, simm16_offset, R11_scratch1); 273 __ lfs(F15_ftos, simm16_offset, R11_scratch1);
274 break; 274 break;
275 } 275 }
276 } 276 }
277 } 277 }
280 transition(vtos, dtos); 280 transition(vtos, dtos);
281 static double zero = 0.0; 281 static double zero = 0.0;
282 static double one = 1.0; 282 static double one = 1.0;
283 switch (value) { 283 switch (value) {
284 case 0: { 284 case 0: {
285 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0); 285 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0, true);
286 __ lfd(F15_ftos, simm16_offset, R11_scratch1); 286 __ lfd(F15_ftos, simm16_offset, R11_scratch1);
287 break; 287 break;
288 } 288 }
289 case 1: { 289 case 1: {
290 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0); 290 int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0, true);
291 __ lfd(F15_ftos, simm16_offset, R11_scratch1); 291 __ lfd(F15_ftos, simm16_offset, R11_scratch1);
292 break; 292 break;
293 } 293 }
294 default: ShouldNotReachHere(); 294 default: ShouldNotReachHere();
295 } 295 }
3726 3726
3727 void TemplateTable::checkcast() { 3727 void TemplateTable::checkcast() {
3728 transition(atos, atos); 3728 transition(atos, atos);
3729 3729
3730 Label Ldone, Lis_null, Lquicked, Lresolved; 3730 Label Ldone, Lis_null, Lquicked, Lresolved;
3731 Register Roffset = R5_ARG3, 3731 Register Roffset = R6_ARG4,
3732 RobjKlass = R4_ARG2, 3732 RobjKlass = R4_ARG2,
3733 RspecifiedKlass = R6_ARG4, // Generate_ClassCastException_verbose_handler will expect this register. 3733 RspecifiedKlass = R5_ARG3, // Generate_ClassCastException_verbose_handler will read value from this register.
3734 Rcpool = R11_scratch1, 3734 Rcpool = R11_scratch1,
3735 Rtags = R12_scratch2; 3735 Rtags = R12_scratch2;
3736 3736
3737 // Null does not pass. 3737 // Null does not pass.
3738 __ cmpdi(CCR0, R17_tos, 0); 3738 __ cmpdi(CCR0, R17_tos, 0);