src/cpu/sparc/vm/assembler_sparc.cpp

changeset 1100
c89f86385056
parent 1079
c517646eef23
child 1115
a80d48f6fde1
     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:

mercurial