src/cpu/sparc/vm/assembler_sparc.cpp

changeset 2350
2f644f85485d
parent 2344
ac637b7220d1
child 2399
7737fa7ec2b5
child 2423
b1a2afa37ec4
     1.1 --- a/src/cpu/sparc/vm/assembler_sparc.cpp	Thu Dec 02 17:21:12 2010 -0800
     1.2 +++ b/src/cpu/sparc/vm/assembler_sparc.cpp	Fri Dec 03 01:34:31 2010 -0800
     1.3 @@ -1443,6 +1443,45 @@
     1.4    }
     1.5  }
     1.6  
     1.7 +int MacroAssembler::size_of_set64(jlong value) {
     1.8 +  v9_dep();
     1.9 +
    1.10 +  int hi = (int)(value >> 32);
    1.11 +  int lo = (int)(value & ~0);
    1.12 +  int count = 0;
    1.13 +
    1.14 +  // (Matcher::isSimpleConstant64 knows about the following optimizations.)
    1.15 +  if (Assembler::is_simm13(lo) && value == lo) {
    1.16 +    count++;
    1.17 +  } else if (hi == 0) {
    1.18 +    count++;
    1.19 +    if (low10(lo) != 0)
    1.20 +      count++;
    1.21 +  }
    1.22 +  else if (hi == -1) {
    1.23 +    count += 2;
    1.24 +  }
    1.25 +  else if (lo == 0) {
    1.26 +    if (Assembler::is_simm13(hi)) {
    1.27 +      count++;
    1.28 +    } else {
    1.29 +      count++;
    1.30 +      if (low10(hi) != 0)
    1.31 +        count++;
    1.32 +    }
    1.33 +    count++;
    1.34 +  }
    1.35 +  else {
    1.36 +    count += 2;
    1.37 +    if (low10(hi) != 0)
    1.38 +      count++;
    1.39 +    if (low10(lo) != 0)
    1.40 +      count++;
    1.41 +    count += 2;
    1.42 +  }
    1.43 +  return count;
    1.44 +}
    1.45 +
    1.46  // compute size in bytes of sparc frame, given
    1.47  // number of extraWords
    1.48  int MacroAssembler::total_frame_size_in_bytes(int extraWords) {

mercurial