src/cpu/x86/vm/c1_LIRAssembler_x86.cpp

changeset 2697
09f96c3ff1ad
parent 2686
b40d4fa697bf
child 2728
13bc79b5c9c8
     1.1 --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Wed Mar 30 18:55:04 2011 -0700
     1.2 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Thu Mar 31 00:27:08 2011 -0700
     1.3 @@ -23,6 +23,7 @@
     1.4   */
     1.5  
     1.6  #include "precompiled.hpp"
     1.7 +#include "asm/assembler.hpp"
     1.8  #include "c1/c1_Compilation.hpp"
     1.9  #include "c1/c1_LIRAssembler.hpp"
    1.10  #include "c1/c1_MacroAssembler.hpp"
    1.11 @@ -569,24 +570,13 @@
    1.12    __ lea          (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
    1.13  
    1.14    // compute minimum length (in rax) and difference of lengths (on top of stack)
    1.15 -  if (VM_Version::supports_cmov()) {
    1.16 -    __ movl     (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
    1.17 -    __ movl     (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
    1.18 -    __ mov      (rcx, rbx);
    1.19 -    __ subptr   (rbx, rax); // subtract lengths
    1.20 -    __ push     (rbx);      // result
    1.21 -    __ cmov     (Assembler::lessEqual, rax, rcx);
    1.22 -  } else {
    1.23 -    Label L;
    1.24 -    __ movl     (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
    1.25 -    __ movl     (rcx, Address(rax, java_lang_String::count_offset_in_bytes()));
    1.26 -    __ mov      (rax, rbx);
    1.27 -    __ subptr   (rbx, rcx);
    1.28 -    __ push     (rbx);
    1.29 -    __ jcc      (Assembler::lessEqual, L);
    1.30 -    __ mov      (rax, rcx);
    1.31 -    __ bind (L);
    1.32 -  }
    1.33 +  __ movl  (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
    1.34 +  __ movl  (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
    1.35 +  __ mov   (rcx, rbx);
    1.36 +  __ subptr(rbx, rax); // subtract lengths
    1.37 +  __ push  (rbx);      // result
    1.38 +  __ cmov  (Assembler::lessEqual, rax, rcx);
    1.39 +
    1.40    // is minimum length 0?
    1.41    Label noLoop, haveResult;
    1.42    __ testptr (rax, rax);

mercurial