comparison src/cpu/ppc/vm/templateTable_ppc_64.cpp @ 20508:f6bde7889409

8059592: Recent bugfixes in ppc64 port. Reviewed-by: kvn
author goetz
date Thu, 02 Oct 2014 09:32:53 +0200
parents b384ba33c9a0
children c5e86c5cd22e
comparison
equal deleted inserted replaced
20507:43ce58b4717b 20508:f6bde7889409
350 __ bind(notClass); 350 __ bind(notClass);
351 __ addi(Rcpool, Rcpool, base_offset); 351 __ addi(Rcpool, Rcpool, base_offset);
352 __ sldi(Rscratch1, Rscratch1, LogBytesPerWord); 352 __ sldi(Rscratch1, Rscratch1, LogBytesPerWord);
353 __ cmpdi(CCR0, Rscratch2, JVM_CONSTANT_Integer); 353 __ cmpdi(CCR0, Rscratch2, JVM_CONSTANT_Integer);
354 __ bne(CCR0, notInt); 354 __ bne(CCR0, notInt);
355 __ isync(); // Order load of constant wrt. tags.
356 __ lwax(R17_tos, Rcpool, Rscratch1); 355 __ lwax(R17_tos, Rcpool, Rscratch1);
357 __ push(itos); 356 __ push(itos);
358 __ b(exit); 357 __ b(exit);
359 358
360 __ align(32, 12); 359 __ align(32, 12);
362 #ifdef ASSERT 361 #ifdef ASSERT
363 // String and Object are rewritten to fast_aldc 362 // String and Object are rewritten to fast_aldc
364 __ cmpdi(CCR0, Rscratch2, JVM_CONSTANT_Float); 363 __ cmpdi(CCR0, Rscratch2, JVM_CONSTANT_Float);
365 __ asm_assert_eq("unexpected type", 0x8765); 364 __ asm_assert_eq("unexpected type", 0x8765);
366 #endif 365 #endif
367 __ isync(); // Order load of constant wrt. tags.
368 __ lfsx(F15_ftos, Rcpool, Rscratch1); 366 __ lfsx(F15_ftos, Rcpool, Rscratch1);
369 __ push(ftos); 367 __ push(ftos);
370 368
371 __ align(32, 12); 369 __ align(32, 12);
372 __ bind(exit); 370 __ bind(exit);
421 __ bne(CCR0, Llong); 419 __ bne(CCR0, Llong);
422 // A double can be placed at word-aligned locations in the constant pool. 420 // A double can be placed at word-aligned locations in the constant pool.
423 // Check out Conversions.java for an example. 421 // Check out Conversions.java for an example.
424 // Also ConstantPool::header_size() is 20, which makes it very difficult 422 // Also ConstantPool::header_size() is 20, which makes it very difficult
425 // to double-align double on the constant pool. SG, 11/7/97 423 // to double-align double on the constant pool. SG, 11/7/97
426 __ isync(); // Order load of constant wrt. tags.
427 __ lfdx(F15_ftos, Rcpool, Rindex); 424 __ lfdx(F15_ftos, Rcpool, Rindex);
428 __ push(dtos); 425 __ push(dtos);
429 __ b(Lexit); 426 __ b(Lexit);
430 427
431 __ bind(Llong); 428 __ bind(Llong);
432 __ isync(); // Order load of constant wrt. tags.
433 __ ldx(R17_tos, Rcpool, Rindex); 429 __ ldx(R17_tos, Rcpool, Rindex);
434 __ push(ltos); 430 __ push(ltos);
435 431
436 __ bind(Lexit); 432 __ bind(Lexit);
437 } 433 }