6162 // Perform above steps with lane comparison expression as INDEX >= 48 && INDEX < 64
6163 // and broadcasting third 128 bit lane.
6164 evpcmpb(ktmp, k0, shuffle, xtmp1, Assembler::nlt, true, vlen_enc);
6165 vpsllq(xtmp2, xtmp2, 0x1, vlen_enc);
6166 evpcmpb(ktmp, ktmp, shuffle, xtmp2, Assembler::lt, true, vlen_enc);
6167 evshufi64x2(xtmp3, src, src, 0xFF, vlen_enc);
6168 evpshufb(dst, ktmp, xtmp3, shuffle, true, vlen_enc);
6169 }
6170
6171 void C2_MacroAssembler::vector_rearrange_int_float(BasicType bt, XMMRegister dst,
6172 XMMRegister shuffle, XMMRegister src, int vlen_enc) {
6173 if (vlen_enc == AVX_128bit) {
6174 vpermilps(dst, src, shuffle, vlen_enc);
6175 } else if (bt == T_INT) {
6176 vpermd(dst, shuffle, src, vlen_enc);
6177 } else {
6178 assert(bt == T_FLOAT, "");
6179 vpermps(dst, shuffle, src, vlen_enc);
6180 }
6181 }
|
6162 // Perform above steps with lane comparison expression as INDEX >= 48 && INDEX < 64
6163 // and broadcasting third 128 bit lane.
6164 evpcmpb(ktmp, k0, shuffle, xtmp1, Assembler::nlt, true, vlen_enc);
6165 vpsllq(xtmp2, xtmp2, 0x1, vlen_enc);
6166 evpcmpb(ktmp, ktmp, shuffle, xtmp2, Assembler::lt, true, vlen_enc);
6167 evshufi64x2(xtmp3, src, src, 0xFF, vlen_enc);
6168 evpshufb(dst, ktmp, xtmp3, shuffle, true, vlen_enc);
6169 }
6170
6171 void C2_MacroAssembler::vector_rearrange_int_float(BasicType bt, XMMRegister dst,
6172 XMMRegister shuffle, XMMRegister src, int vlen_enc) {
6173 if (vlen_enc == AVX_128bit) {
6174 vpermilps(dst, src, shuffle, vlen_enc);
6175 } else if (bt == T_INT) {
6176 vpermd(dst, shuffle, src, vlen_enc);
6177 } else {
6178 assert(bt == T_FLOAT, "");
6179 vpermps(dst, shuffle, src, vlen_enc);
6180 }
6181 }
6182
6183 #ifdef _LP64
6184 void C2_MacroAssembler::load_nklass_compact_c2(Register dst, Register obj) {
6185 C2LoadNKlassStub* stub = new (Compile::current()->comp_arena()) C2LoadNKlassStub(dst);
6186 Compile::current()->output()->add_stub(stub);
6187 movq(dst, Address(obj, oopDesc::mark_offset_in_bytes()));
6188 testb(dst, markWord::monitor_value);
6189 jcc(Assembler::notZero, stub->entry());
6190 bind(stub->continuation());
6191 shrq(dst, markWord::klass_shift);
6192 }
6193 #endif
|