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