< prev index next >

src/cpu/x86/vm/macroAssembler_x86.cpp

Print this page

        

*** 3398,3407 **** --- 3398,3433 ---- lea(rscratch1, src); movq(dst, Address(rscratch1, 0)); } } + // AVX512 masks used for fixup loops + jushort evex_simd_mask_table[] = + { + 0xffff, 0x0001, 0x0003, 0x0007, 0x000f, + 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, + 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, + 0x7fff + }; + + void MacroAssembler::createmsk(Register dst, Register src) { + ExternalAddress mask_table((address)evex_simd_mask_table); + lea(dst, mask_table); + Assembler::kmovwl(k1, Address(dst, src, Address::times_2, 0)); + Assembler::movl(dst, src); + } + + void MacroAssembler::restoremsk() { + ExternalAddress mask_table((address)evex_simd_mask_table); + if (reachable(mask_table)) { + Assembler::kmovwl(k1, as_Address(mask_table)); + } else { + lea(rscratch1, mask_table); + Assembler::kmovwl(k1, Address(rscratch1, 0)); + } + } + void MacroAssembler::movdbl(XMMRegister dst, AddressLiteral src) { if (reachable(src)) { if (UseXmmLoadAndClearUpper) { movsd (dst, as_Address(src)); } else {
< prev index next >