src/cpu/x86/vm/x86_64.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7118863 Cdiff src/cpu/x86/vm/x86_64.ad

src/cpu/x86/vm/x86_64.ad

Print this page

        

*** 12160,12175 **** %{ match(Set result (PartialSubtypeCheck sub super)); effect(KILL rcx, KILL cr); ins_cost(1100); // slightly larger than the next version ! format %{ "movq rdi, [$sub + (sizeof(oopDesc) + Klass::secondary_supers_offset_in_bytes())]\n\t" "movl rcx, [rdi + arrayOopDesc::length_offset_in_bytes()]\t# length to scan\n\t" "addq rdi, arrayOopDex::base_offset_in_bytes(T_OBJECT)\t# Skip to start of data; set NZ in case count is zero\n\t" "repne scasq\t# Scan *rdi++ for a match with rax while rcx--\n\t" "jne,s miss\t\t# Missed: rdi not-zero\n\t" ! "movq [$sub + (sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())], $super\t# Hit: update cache\n\t" "xorq $result, $result\t\t Hit: rdi zero\n\t" "miss:\t" %} opcode(0x1); // Force a XOR of RDI ins_encode(enc_PartialSubtypeCheck()); --- 12160,12175 ---- %{ match(Set result (PartialSubtypeCheck sub super)); effect(KILL rcx, KILL cr); ins_cost(1100); // slightly larger than the next version ! format %{ "movq rdi, [$sub + Klass::secondary_supers_offset_in_bytes()]\n\t" "movl rcx, [rdi + arrayOopDesc::length_offset_in_bytes()]\t# length to scan\n\t" "addq rdi, arrayOopDex::base_offset_in_bytes(T_OBJECT)\t# Skip to start of data; set NZ in case count is zero\n\t" "repne scasq\t# Scan *rdi++ for a match with rax while rcx--\n\t" "jne,s miss\t\t# Missed: rdi not-zero\n\t" ! "movq [$sub + Klass::secondary_super_cache_offset_in_bytes()], $super\t# Hit: update cache\n\t" "xorq $result, $result\t\t Hit: rdi zero\n\t" "miss:\t" %} opcode(0x1); // Force a XOR of RDI ins_encode(enc_PartialSubtypeCheck());
*** 12183,12198 **** %{ match(Set cr (CmpP (PartialSubtypeCheck sub super) zero)); effect(KILL rcx, KILL result); ins_cost(1000); ! format %{ "movq rdi, [$sub + (sizeof(oopDesc) + Klass::secondary_supers_offset_in_bytes())]\n\t" "movl rcx, [rdi + arrayOopDesc::length_offset_in_bytes()]\t# length to scan\n\t" "addq rdi, arrayOopDex::base_offset_in_bytes(T_OBJECT)\t# Skip to start of data; set NZ in case count is zero\n\t" "repne scasq\t# Scan *rdi++ for a match with rax while cx-- != 0\n\t" "jne,s miss\t\t# Missed: flags nz\n\t" ! "movq [$sub + (sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())], $super\t# Hit: update cache\n\t" "miss:\t" %} opcode(0x0); // No need to XOR RDI ins_encode(enc_PartialSubtypeCheck()); ins_pipe(pipe_slow); --- 12183,12198 ---- %{ match(Set cr (CmpP (PartialSubtypeCheck sub super) zero)); effect(KILL rcx, KILL result); ins_cost(1000); ! format %{ "movq rdi, [$sub + Klass::secondary_supers_offset_in_bytes()]\n\t" "movl rcx, [rdi + arrayOopDesc::length_offset_in_bytes()]\t# length to scan\n\t" "addq rdi, arrayOopDex::base_offset_in_bytes(T_OBJECT)\t# Skip to start of data; set NZ in case count is zero\n\t" "repne scasq\t# Scan *rdi++ for a match with rax while cx-- != 0\n\t" "jne,s miss\t\t# Missed: flags nz\n\t" ! "movq [$sub + Klass::secondary_super_cache_offset_in_bytes()], $super\t# Hit: update cache\n\t" "miss:\t" %} opcode(0x0); // No need to XOR RDI ins_encode(enc_PartialSubtypeCheck()); ins_pipe(pipe_slow);
src/cpu/x86/vm/x86_64.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File