--- a/hotspot/src/cpu/sparc/vm/sparc.ad Wed Oct 16 10:52:41 2013 +0200
+++ b/hotspot/src/cpu/sparc/vm/sparc.ad Tue Nov 05 17:38:04 2013 -0800
@@ -557,7 +557,7 @@
int entry_offset = InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size();
int v_off = entry_offset*wordSize + vtableEntry::method_offset_in_bytes();
int klass_load_size;
- if (UseCompressedKlassPointers) {
+ if (UseCompressedClassPointers) {
assert(Universe::heap() != NULL, "java heap should be initialized");
klass_load_size = MacroAssembler::instr_size_for_decode_klass_not_null() + 1*BytesPerInstWord;
} else {
@@ -1657,15 +1657,19 @@
void MachUEPNode::format( PhaseRegAlloc *ra_, outputStream *st ) const {
st->print_cr("\nUEP:");
#ifdef _LP64
- if (UseCompressedKlassPointers) {
+ if (UseCompressedClassPointers) {
assert(Universe::heap() != NULL, "java heap should be initialized");
st->print_cr("\tLDUW [R_O0 + oopDesc::klass_offset_in_bytes],R_G5\t! Inline cache check - compressed klass");
- st->print_cr("\tSET Universe::narrow_klass_base,R_G6_heap_base");
- if (Universe::narrow_klass_shift() != 0) {
- st->print_cr("\tSLL R_G5,3,R_G5");
+ if (Universe::narrow_klass_base() != 0) {
+ st->print_cr("\tSET Universe::narrow_klass_base,R_G6_heap_base");
+ if (Universe::narrow_klass_shift() != 0) {
+ st->print_cr("\tSLL R_G5,Universe::narrow_klass_shift,R_G5");
+ }
+ st->print_cr("\tADD R_G5,R_G6_heap_base,R_G5");
+ st->print_cr("\tSET Universe::narrow_ptrs_base,R_G6_heap_base");
+ } else {
+ st->print_cr("\tSLL R_G5,Universe::narrow_klass_shift,R_G5");
}
- st->print_cr("\tADD R_G5,R_G6_heap_base,R_G5");
- st->print_cr("\tSET Universe::narrow_ptrs_base,R_G6_heap_base");
} else {
st->print_cr("\tLDX [R_O0 + oopDesc::klass_offset_in_bytes],R_G5\t! Inline cache check");
}
@@ -1897,7 +1901,7 @@
bool Matcher::narrow_klass_use_complex_address() {
NOT_LP64(ShouldNotCallThis());
- assert(UseCompressedKlassPointers, "only for compressed klass code");
+ assert(UseCompressedClassPointers, "only for compressed klass code");
return false;
}
@@ -2018,6 +2022,19 @@
return L7_REGP_mask();
}
+const RegMask Matcher::mathExactI_result_proj_mask() {
+ return G1_REGI_mask();
+}
+
+const RegMask Matcher::mathExactL_result_proj_mask() {
+ return G1_REGL_mask();
+}
+
+const RegMask Matcher::mathExactI_flags_proj_mask() {
+ return INT_FLAGS_mask();
+}
+
+
%}
@@ -2561,7 +2578,7 @@
int off = __ offset();
__ load_klass(O0, G3_scratch);
int klass_load_size;
- if (UseCompressedKlassPointers) {
+ if (UseCompressedClassPointers) {
assert(Universe::heap() != NULL, "java heap should be initialized");
klass_load_size = MacroAssembler::instr_size_for_decode_klass_not_null() + 1*BytesPerInstWord;
} else {
@@ -4245,12 +4262,16 @@
greater_equal(0xB);
less_equal(0x2);
greater(0xA);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
// Comparison Op, unsigned
operand cmpOpU() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "u" %}
interface(COND_INTER) %{
@@ -4260,12 +4281,16 @@
greater_equal(0xD);
less_equal(0x4);
greater(0xC);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
// Comparison Op, pointer (same as unsigned)
operand cmpOpP() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "p" %}
interface(COND_INTER) %{
@@ -4275,12 +4300,16 @@
greater_equal(0xD);
less_equal(0x4);
greater(0xC);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
// Comparison Op, branch-register encoding
operand cmpOp_reg() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "" %}
interface(COND_INTER) %{
@@ -4290,12 +4319,16 @@
greater_equal(0x7);
less_equal (0x2);
greater (0x6);
+ overflow(0x7); // not supported
+ no_overflow(0xF); // not supported
%}
%}
// Comparison Code, floating, unordered same as less
operand cmpOpF() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "fl" %}
interface(COND_INTER) %{
@@ -4305,12 +4338,17 @@
greater_equal(0xB);
less_equal(0xE);
greater(0x6);
+
+ overflow(0x7); // not supported
+ no_overflow(0xF); // not supported
%}
%}
// Used by long compare
operand cmpOp_commute() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "" %}
interface(COND_INTER) %{
@@ -4320,6 +4358,8 @@
greater_equal(0x2);
less_equal(0xB);
greater(0x3);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}