src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hs-comp-8038222 Cdiff src/cpu/x86/vm/assembler_x86.cpp

src/cpu/x86/vm/assembler_x86.cpp

Print this page

        

*** 1110,1121 **** emit_int8((unsigned char)0xBC); emit_int8((unsigned char)(0xC0 | encode)); } void Assembler::bsrl(Register dst, Register src) { ! assert(!VM_Version::supports_lzcnt(), "encoding is treated as LZCNT"); int encode = prefix_and_encode(dst->encoding(), src->encoding()); emit_int8(0x0F); emit_int8((unsigned char)0xBD); emit_int8((unsigned char)(0xC0 | encode)); } --- 1110,1125 ---- emit_int8((unsigned char)0xBC); emit_int8((unsigned char)(0xC0 | encode)); } void Assembler::bsrl(Register dst, Register src) { ! #ifdef ASSERT ! address prefix = pc(); ! #endif int encode = prefix_and_encode(dst->encoding(), src->encoding()); + // x86 oddity: bsr with a rep prefix (f3) is lzcnt when CPU supports it + assert(!VM_Version::supports_lzcnt() || pc() == prefix || *prefix != REP, "encoding is treated as LZCNT with REP prefix"); emit_int8(0x0F); emit_int8((unsigned char)0xBD); emit_int8((unsigned char)(0xC0 | encode)); }
*** 4975,4986 **** emit_int8((unsigned char)0xBC); emit_int8((unsigned char)(0xC0 | encode)); } void Assembler::bsrq(Register dst, Register src) { ! assert(!VM_Version::supports_lzcnt(), "encoding is treated as LZCNT"); int encode = prefixq_and_encode(dst->encoding(), src->encoding()); emit_int8(0x0F); emit_int8((unsigned char)0xBD); emit_int8((unsigned char)(0xC0 | encode)); } --- 4979,4994 ---- emit_int8((unsigned char)0xBC); emit_int8((unsigned char)(0xC0 | encode)); } void Assembler::bsrq(Register dst, Register src) { ! #ifdef ASSERT ! address prefix = pc(); ! #endif int encode = prefixq_and_encode(dst->encoding(), src->encoding()); + // x86 oddity: bsr with a rep prefix (f3) is lzcnt when CPU supports it + assert(!VM_Version::supports_lzcnt() || pc() == prefix || *prefix != REP, "encoding is treated as LZCNT with REP prefix"); emit_int8(0x0F); emit_int8((unsigned char)0xBD); emit_int8((unsigned char)(0xC0 | encode)); }
src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File