block_of_code: Add vzeroupper instructions where AVX-SSE transitions may occur

This commit is contained in:
MerryMage 2017-11-02 20:07:01 +00:00
parent 60d9392b5c
commit 19dcdde90b
2 changed files with 12 additions and 0 deletions

View file

@ -86,6 +86,12 @@ void BlockOfCode::GenRunCode() {
align();
run_code = getCurr<RunCodeFuncType>();
// As we currently do not emit AVX instructions, AVX-SSE transition may occur.
// We avoid the transition penalty by calling vzeroupper.
if (DoesCpuSupport(Xbyak::util::Cpu::tAVX)) {
vzeroupper();
}
// This serves two purposes:
// 1. It saves all the registers we as a callee need to save.
// 2. It aligns the stack so that the code the JIT emits can assume