src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/c1_LIRGenerator_x86.cpp

Print this page




 924 #endif // LP64
 925 
 926   set_no_result(x);
 927 
 928   int flags;
 929   ciArrayKlass* expected_type;
 930   arraycopy_helper(x, &flags, &expected_type);
 931 
 932   __ arraycopy(src.result(), src_pos.result(), dst.result(), dst_pos.result(), length.result(), tmp, expected_type, flags, info); // does add_safepoint
 933 }
 934 
 935 void LIRGenerator::do_update_CRC32(Intrinsic* x) {
 936   assert(UseCRC32Intrinsics, "need AVX and LCMUL instructions support");
 937   // Make all state_for calls early since they can emit code
 938   LIR_Opr result = rlock_result(x);
 939   int flags = 0;
 940   switch (x->id()) {
 941     case vmIntrinsics::_updateCRC32: {
 942       LIRItem crc(x->argument_at(0), this);
 943       LIRItem val(x->argument_at(1), this);


 944       crc.load_item();
 945       val.load_item();
 946       __ update_crc32(crc.result(), val.result(), result);
 947       break;
 948     }
 949     case vmIntrinsics::_updateBytesCRC32:
 950     case vmIntrinsics::_updateByteBufferCRC32: {
 951       bool is_updateBytes = (x->id() == vmIntrinsics::_updateBytesCRC32);
 952 
 953       LIRItem crc(x->argument_at(0), this);
 954       LIRItem buf(x->argument_at(1), this);
 955       LIRItem off(x->argument_at(2), this);
 956       LIRItem len(x->argument_at(3), this);
 957       buf.load_item();
 958       off.load_nonconstant();
 959 
 960       LIR_Opr index = off.result();
 961       int offset = is_updateBytes ? arrayOopDesc::base_offset_in_bytes(T_BYTE) : 0;
 962       if(off.result()->is_constant()) {
 963         index = LIR_OprFact::illegalOpr;




 924 #endif // LP64
 925 
 926   set_no_result(x);
 927 
 928   int flags;
 929   ciArrayKlass* expected_type;
 930   arraycopy_helper(x, &flags, &expected_type);
 931 
 932   __ arraycopy(src.result(), src_pos.result(), dst.result(), dst_pos.result(), length.result(), tmp, expected_type, flags, info); // does add_safepoint
 933 }
 934 
 935 void LIRGenerator::do_update_CRC32(Intrinsic* x) {
 936   assert(UseCRC32Intrinsics, "need AVX and LCMUL instructions support");
 937   // Make all state_for calls early since they can emit code
 938   LIR_Opr result = rlock_result(x);
 939   int flags = 0;
 940   switch (x->id()) {
 941     case vmIntrinsics::_updateCRC32: {
 942       LIRItem crc(x->argument_at(0), this);
 943       LIRItem val(x->argument_at(1), this);
 944       // val is destroyed by update_crc32
 945       val.set_destroys_register();
 946       crc.load_item();
 947       val.load_item();
 948       __ update_crc32(crc.result(), val.result(), result);
 949       break;
 950     }
 951     case vmIntrinsics::_updateBytesCRC32:
 952     case vmIntrinsics::_updateByteBufferCRC32: {
 953       bool is_updateBytes = (x->id() == vmIntrinsics::_updateBytesCRC32);
 954 
 955       LIRItem crc(x->argument_at(0), this);
 956       LIRItem buf(x->argument_at(1), this);
 957       LIRItem off(x->argument_at(2), this);
 958       LIRItem len(x->argument_at(3), this);
 959       buf.load_item();
 960       off.load_nonconstant();
 961 
 962       LIR_Opr index = off.result();
 963       int offset = is_updateBytes ? arrayOopDesc::base_offset_in_bytes(T_BYTE) : 0;
 964       if(off.result()->is_constant()) {
 965         index = LIR_OprFact::illegalOpr;


src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File