1.1 --- a/src/cpu/sparc/vm/assembler_sparc.cpp Thu Mar 19 09:13:24 2009 -0700 1.2 +++ b/src/cpu/sparc/vm/assembler_sparc.cpp Fri Mar 20 23:19:36 2009 -0700 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. 1.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -2615,12 +2615,12 @@ 1.11 } 1.12 } 1.13 1.14 -RegisterConstant MacroAssembler::delayed_value(intptr_t* delayed_value_addr, 1.15 - Register tmp, 1.16 - int offset) { 1.17 +RegisterOrConstant MacroAssembler::delayed_value_impl(intptr_t* delayed_value_addr, 1.18 + Register tmp, 1.19 + int offset) { 1.20 intptr_t value = *delayed_value_addr; 1.21 if (value != 0) 1.22 - return RegisterConstant(value + offset); 1.23 + return RegisterOrConstant(value + offset); 1.24 1.25 // load indirectly to solve generation ordering problem 1.26 Address a(tmp, (address) delayed_value_addr); 1.27 @@ -2634,11 +2634,11 @@ 1.28 if (offset != 0) 1.29 add(tmp, offset, tmp); 1.30 1.31 - return RegisterConstant(tmp); 1.32 + return RegisterOrConstant(tmp); 1.33 } 1.34 1.35 1.36 -void MacroAssembler::regcon_inc_ptr( RegisterConstant& dest, RegisterConstant src, Register temp ) { 1.37 +void MacroAssembler::regcon_inc_ptr( RegisterOrConstant& dest, RegisterOrConstant src, Register temp ) { 1.38 assert(dest.register_or_noreg() != G0, "lost side effect"); 1.39 if ((src.is_constant() && src.as_constant() == 0) || 1.40 (src.is_register() && src.as_register() == G0)) { 1.41 @@ -2647,15 +2647,15 @@ 1.42 add(dest.as_register(), ensure_rs2(src, temp), dest.as_register()); 1.43 } else if (src.is_constant()) { 1.44 intptr_t res = dest.as_constant() + src.as_constant(); 1.45 - dest = RegisterConstant(res); // side effect seen by caller 1.46 + dest = RegisterOrConstant(res); // side effect seen by caller 1.47 } else { 1.48 assert(temp != noreg, "cannot handle constant += register"); 1.49 add(src.as_register(), ensure_rs2(dest, temp), temp); 1.50 - dest = RegisterConstant(temp); // side effect seen by caller 1.51 + dest = RegisterOrConstant(temp); // side effect seen by caller 1.52 } 1.53 } 1.54 1.55 -void MacroAssembler::regcon_sll_ptr( RegisterConstant& dest, RegisterConstant src, Register temp ) { 1.56 +void MacroAssembler::regcon_sll_ptr( RegisterOrConstant& dest, RegisterOrConstant src, Register temp ) { 1.57 assert(dest.register_or_noreg() != G0, "lost side effect"); 1.58 if (!is_simm13(src.constant_or_zero())) 1.59 src = (src.as_constant() & 0xFF); 1.60 @@ -2666,12 +2666,12 @@ 1.61 sll_ptr(dest.as_register(), src, dest.as_register()); 1.62 } else if (src.is_constant()) { 1.63 intptr_t res = dest.as_constant() << src.as_constant(); 1.64 - dest = RegisterConstant(res); // side effect seen by caller 1.65 + dest = RegisterOrConstant(res); // side effect seen by caller 1.66 } else { 1.67 assert(temp != noreg, "cannot handle constant <<= register"); 1.68 set(dest.as_constant(), temp); 1.69 sll_ptr(temp, src, temp); 1.70 - dest = RegisterConstant(temp); // side effect seen by caller 1.71 + dest = RegisterOrConstant(temp); // side effect seen by caller 1.72 } 1.73 } 1.74 1.75 @@ -2683,7 +2683,7 @@ 1.76 // On failure, execution transfers to the given label. 1.77 void MacroAssembler::lookup_interface_method(Register recv_klass, 1.78 Register intf_klass, 1.79 - RegisterConstant itable_index, 1.80 + RegisterOrConstant itable_index, 1.81 Register method_result, 1.82 Register scan_temp, 1.83 Register sethi_temp, 1.84 @@ -2720,7 +2720,7 @@ 1.85 add(recv_klass, scan_temp, scan_temp); 1.86 1.87 // Adjust recv_klass by scaled itable_index, so we can free itable_index. 1.88 - RegisterConstant itable_offset = itable_index; 1.89 + RegisterOrConstant itable_offset = itable_index; 1.90 regcon_sll_ptr(itable_offset, exact_log2(itableMethodEntry::size() * wordSize)); 1.91 regcon_inc_ptr(itable_offset, itableMethodEntry::method_offset_in_bytes()); 1.92 add(recv_klass, ensure_rs2(itable_offset, sethi_temp), recv_klass); 1.93 @@ -2805,7 +2805,7 @@ 1.94 Label* L_success, 1.95 Label* L_failure, 1.96 Label* L_slow_path, 1.97 - RegisterConstant super_check_offset, 1.98 + RegisterOrConstant super_check_offset, 1.99 Register instanceof_hack) { 1.100 int sc_offset = (klassOopDesc::header_size() * HeapWordSize + 1.101 Klass::secondary_super_cache_offset_in_bytes()); 1.102 @@ -2867,7 +2867,7 @@ 1.103 if (must_load_sco) { 1.104 // The super check offset is always positive... 1.105 lduw(super_klass, sco_offset, temp2_reg); 1.106 - super_check_offset = RegisterConstant(temp2_reg); 1.107 + super_check_offset = RegisterOrConstant(temp2_reg); 1.108 } 1.109 ld_ptr(sub_klass, super_check_offset, temp_reg); 1.110 cmp(super_klass, temp_reg); 1.111 @@ -4472,7 +4472,7 @@ 1.112 } 1.113 1.114 // Loading values by size and signed-ness 1.115 -void MacroAssembler::load_sized_value(Register s1, RegisterConstant s2, Register d, 1.116 +void MacroAssembler::load_sized_value(Register s1, RegisterOrConstant s2, Register d, 1.117 int size_in_bytes, bool is_signed) { 1.118 switch (size_in_bytes ^ (is_signed ? -1 : 0)) { 1.119 case ~8: // fall through: