src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hs-comp-c1-bad-null-check Sdiff src/cpu/x86/vm

src/cpu/x86/vm/c1_LIRAssembler_x86.cpp

Print this page




 782   LIR_Const* c = src->as_constant_ptr();
 783   LIR_Address* addr = dest->as_address_ptr();
 784 
 785   int null_check_here = code_offset();
 786   switch (type) {
 787     case T_INT:    // fall through
 788     case T_FLOAT:
 789       __ movl(as_Address(addr), c->as_jint_bits());
 790       break;
 791 
 792     case T_ADDRESS:
 793       __ movptr(as_Address(addr), c->as_jint_bits());
 794       break;
 795 
 796     case T_OBJECT:  // fall through
 797     case T_ARRAY:
 798       if (c->as_jobject() == NULL) {
 799         if (UseCompressedOops && !wide) {
 800           __ movl(as_Address(addr), (int32_t)NULL_WORD);
 801         } else {





 802           __ movptr(as_Address(addr), NULL_WORD);

 803         }
 804       } else {
 805         if (is_literal_address(addr)) {
 806           ShouldNotReachHere();
 807           __ movoop(as_Address(addr, noreg), c->as_jobject());
 808         } else {
 809 #ifdef _LP64
 810           __ movoop(rscratch1, c->as_jobject());
 811           if (UseCompressedOops && !wide) {
 812             __ encode_heap_oop(rscratch1);
 813             null_check_here = code_offset();
 814             __ movl(as_Address_lo(addr), rscratch1);
 815           } else {
 816             null_check_here = code_offset();
 817             __ movptr(as_Address_lo(addr), rscratch1);
 818           }
 819 #else
 820           __ movoop(as_Address(addr), c->as_jobject());
 821 #endif
 822         }




 782   LIR_Const* c = src->as_constant_ptr();
 783   LIR_Address* addr = dest->as_address_ptr();
 784 
 785   int null_check_here = code_offset();
 786   switch (type) {
 787     case T_INT:    // fall through
 788     case T_FLOAT:
 789       __ movl(as_Address(addr), c->as_jint_bits());
 790       break;
 791 
 792     case T_ADDRESS:
 793       __ movptr(as_Address(addr), c->as_jint_bits());
 794       break;
 795 
 796     case T_OBJECT:  // fall through
 797     case T_ARRAY:
 798       if (c->as_jobject() == NULL) {
 799         if (UseCompressedOops && !wide) {
 800           __ movl(as_Address(addr), (int32_t)NULL_WORD);
 801         } else {
 802 #ifdef _LP64
 803           __ xorptr(rscratch1, rscratch1);
 804           null_check_here = code_offset();
 805           __ movptr(as_Address(addr), rscratch1);
 806 #else
 807           __ movptr(as_Address(addr), NULL_WORD);
 808 #endif
 809         }
 810       } else {
 811         if (is_literal_address(addr)) {
 812           ShouldNotReachHere();
 813           __ movoop(as_Address(addr, noreg), c->as_jobject());
 814         } else {
 815 #ifdef _LP64
 816           __ movoop(rscratch1, c->as_jobject());
 817           if (UseCompressedOops && !wide) {
 818             __ encode_heap_oop(rscratch1);
 819             null_check_here = code_offset();
 820             __ movl(as_Address_lo(addr), rscratch1);
 821           } else {
 822             null_check_here = code_offset();
 823             __ movptr(as_Address_lo(addr), rscratch1);
 824           }
 825 #else
 826           __ movoop(as_Address(addr), c->as_jobject());
 827 #endif
 828         }


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