12143 match(Set result (PartialSubtypeCheck sub super)); |
12143 match(Set result (PartialSubtypeCheck sub super)); |
12144 effect( KILL rcx, KILL cr ); |
12144 effect( KILL rcx, KILL cr ); |
12145 |
12145 |
12146 ins_cost(1100); // slightly larger than the next version |
12146 ins_cost(1100); // slightly larger than the next version |
12147 format %{ "MOV EDI,[$sub+Klass::secondary_supers]\n\t" |
12147 format %{ "MOV EDI,[$sub+Klass::secondary_supers]\n\t" |
12148 "MOV ECX,[EDI+arrayKlass::length]\t# length to scan\n\t" |
12148 "MOV ECX,[EDI+ArrayKlass::length]\t# length to scan\n\t" |
12149 "ADD EDI,arrayKlass::base_offset\t# Skip to start of data; set NZ in case count is zero\n\t" |
12149 "ADD EDI,ArrayKlass::base_offset\t# Skip to start of data; set NZ in case count is zero\n\t" |
12150 "REPNE SCASD\t# Scan *EDI++ for a match with EAX while CX-- != 0\n\t" |
12150 "REPNE SCASD\t# Scan *EDI++ for a match with EAX while CX-- != 0\n\t" |
12151 "JNE,s miss\t\t# Missed: EDI not-zero\n\t" |
12151 "JNE,s miss\t\t# Missed: EDI not-zero\n\t" |
12152 "MOV [$sub+Klass::secondary_super_cache],$super\t# Hit: update cache\n\t" |
12152 "MOV [$sub+Klass::secondary_super_cache],$super\t# Hit: update cache\n\t" |
12153 "XOR $result,$result\t\t Hit: EDI zero\n\t" |
12153 "XOR $result,$result\t\t Hit: EDI zero\n\t" |
12154 "miss:\t" %} |
12154 "miss:\t" %} |
12162 match(Set cr (CmpP (PartialSubtypeCheck sub super) zero)); |
12162 match(Set cr (CmpP (PartialSubtypeCheck sub super) zero)); |
12163 effect( KILL rcx, KILL result ); |
12163 effect( KILL rcx, KILL result ); |
12164 |
12164 |
12165 ins_cost(1000); |
12165 ins_cost(1000); |
12166 format %{ "MOV EDI,[$sub+Klass::secondary_supers]\n\t" |
12166 format %{ "MOV EDI,[$sub+Klass::secondary_supers]\n\t" |
12167 "MOV ECX,[EDI+arrayKlass::length]\t# length to scan\n\t" |
12167 "MOV ECX,[EDI+ArrayKlass::length]\t# length to scan\n\t" |
12168 "ADD EDI,arrayKlass::base_offset\t# Skip to start of data; set NZ in case count is zero\n\t" |
12168 "ADD EDI,ArrayKlass::base_offset\t# Skip to start of data; set NZ in case count is zero\n\t" |
12169 "REPNE SCASD\t# Scan *EDI++ for a match with EAX while CX-- != 0\n\t" |
12169 "REPNE SCASD\t# Scan *EDI++ for a match with EAX while CX-- != 0\n\t" |
12170 "JNE,s miss\t\t# Missed: flags NZ\n\t" |
12170 "JNE,s miss\t\t# Missed: flags NZ\n\t" |
12171 "MOV [$sub+Klass::secondary_super_cache],$super\t# Hit: update cache, flags Z\n\t" |
12171 "MOV [$sub+Klass::secondary_super_cache],$super\t# Hit: update cache, flags Z\n\t" |
12172 "miss:\t" %} |
12172 "miss:\t" %} |
12173 |
12173 |