< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.cpp

Print this page




1228     __ jcc(Assembler::negative, L); // NaN -> 0
1229     __ testq(c_rarg0, c_rarg0); // signed ? min_jlong : max_jlong
1230     __ mov64(c_rarg2, 0x8000000000000000);
1231     __ mov64(rax, 0x7fffffffffffffff);
1232     __ cmovq(Assembler::positive, c_rarg2, rax);
1233 
1234     __ bind(L);
1235     __ movq(inout, c_rarg2);
1236 
1237     __ pop(c_rarg0);
1238     __ pop(c_rarg1);
1239     __ pop(c_rarg2);
1240     __ pop(c_rarg3);
1241     __ pop(rax);
1242 
1243     __ ret(0);
1244 
1245     return start;
1246   }
1247 















1248   address generate_fp_mask(const char *stub_name, int64_t mask) {
1249     __ align(CodeEntryAlignment);
1250     StubCodeMark mark(this, "StubRoutines", stub_name);
1251     address start = __ pc();
1252 
1253     __ emit_data64( mask, relocInfo::none );
1254     __ emit_data64( mask, relocInfo::none );
1255 
1256     return start;
1257   }
1258 
1259   address generate_vector_fp_mask(const char *stub_name, int64_t mask) {
1260     __ align(CodeEntryAlignment);
1261     StubCodeMark mark(this, "StubRoutines", stub_name);
1262     address start = __ pc();
1263 
1264     __ emit_data64(mask, relocInfo::none);
1265     __ emit_data64(mask, relocInfo::none);
1266     __ emit_data64(mask, relocInfo::none);
1267     __ emit_data64(mask, relocInfo::none);


6195                                                 throw_AbstractMethodError));
6196 
6197     StubRoutines::_throw_IncompatibleClassChangeError_entry =
6198       generate_throw_exception("IncompatibleClassChangeError throw_exception",
6199                                CAST_FROM_FN_PTR(address,
6200                                                 SharedRuntime::
6201                                                 throw_IncompatibleClassChangeError));
6202 
6203     StubRoutines::_throw_NullPointerException_at_call_entry =
6204       generate_throw_exception("NullPointerException at call throw_exception",
6205                                CAST_FROM_FN_PTR(address,
6206                                                 SharedRuntime::
6207                                                 throw_NullPointerException_at_call));
6208 
6209     // entry points that are platform specific
6210     StubRoutines::x86::_f2i_fixup = generate_f2i_fixup();
6211     StubRoutines::x86::_f2l_fixup = generate_f2l_fixup();
6212     StubRoutines::x86::_d2i_fixup = generate_d2i_fixup();
6213     StubRoutines::x86::_d2l_fixup = generate_d2l_fixup();
6214 

6215     StubRoutines::x86::_float_sign_mask  = generate_fp_mask("float_sign_mask",  0x7FFFFFFF7FFFFFFF);
6216     StubRoutines::x86::_float_sign_flip  = generate_fp_mask("float_sign_flip",  0x8000000080000000);
6217     StubRoutines::x86::_double_sign_mask = generate_fp_mask("double_sign_mask", 0x7FFFFFFFFFFFFFFF);
6218     StubRoutines::x86::_double_sign_flip = generate_fp_mask("double_sign_flip", 0x8000000000000000);
6219     StubRoutines::x86::_vector_float_sign_mask = generate_vector_fp_mask("vector_float_sign_mask", 0x7FFFFFFF7FFFFFFF);
6220     StubRoutines::x86::_vector_float_sign_flip = generate_vector_fp_mask("vector_float_sign_flip", 0x8000000080000000);
6221     StubRoutines::x86::_vector_double_sign_mask = generate_vector_fp_mask("vector_double_sign_mask", 0x7FFFFFFFFFFFFFFF);
6222     StubRoutines::x86::_vector_double_sign_flip = generate_vector_fp_mask("vector_double_sign_flip", 0x8000000000000000);
6223     StubRoutines::x86::_vector_all_bits_set = generate_vector_fp_mask("vector_all_bits_set", 0xFFFFFFFFFFFFFFFF);
6224     StubRoutines::x86::_vector_byte_bitset = generate_vector_fp_mask("vector_byte_bitset", 0x0101010101010101);
6225     StubRoutines::x86::_vector_long_perm_mask = generate_vector_custom_i32("vector_long_perm_mask", Assembler::AVX_512bit,
6226                                                                            0, 2, 4, 6, 8, 10, 12, 14);
6227     StubRoutines::x86::_vector_short_to_byte_mask = generate_vector_fp_mask("vector_short_to_byte_mask", 0x00ff00ff00ff00ff);
6228     StubRoutines::x86::_vector_byte_perm_mask = generate_vector_byte_perm_mask("vector_byte_perm_mask");
6229     StubRoutines::x86::_vector_int_to_byte_mask = generate_vector_fp_mask("vector_int_to_byte_mask", 0x000000ff000000ff);
6230     StubRoutines::x86::_vector_int_to_short_mask = generate_vector_fp_mask("vector_int_to_short_mask", 0x0000ffff0000ffff);
6231     StubRoutines::x86::_vector_32_bit_mask = generate_vector_custom_i32("vector_32_bit_mask", Assembler::AVX_512bit,
6232                                                                         0xFFFFFFFF, 0, 0, 0);
6233     StubRoutines::x86::_vector_64_bit_mask = generate_vector_custom_i32("vector_64_bit_mask", Assembler::AVX_512bit,
6234                                                                         0xFFFFFFFF, 0xFFFFFFFF, 0, 0);




1228     __ jcc(Assembler::negative, L); // NaN -> 0
1229     __ testq(c_rarg0, c_rarg0); // signed ? min_jlong : max_jlong
1230     __ mov64(c_rarg2, 0x8000000000000000);
1231     __ mov64(rax, 0x7fffffffffffffff);
1232     __ cmovq(Assembler::positive, c_rarg2, rax);
1233 
1234     __ bind(L);
1235     __ movq(inout, c_rarg2);
1236 
1237     __ pop(c_rarg0);
1238     __ pop(c_rarg1);
1239     __ pop(c_rarg2);
1240     __ pop(c_rarg3);
1241     __ pop(rax);
1242 
1243     __ ret(0);
1244 
1245     return start;
1246   }
1247 
1248   address generate_iota_indices(const char *stub_name) {
1249     __ align(CodeEntryAlignment);
1250     StubCodeMark mark(this, "StubRoutines", stub_name);
1251     address start = __ pc();
1252     __ emit_data64(0x0706050403020100, relocInfo::none);
1253     __ emit_data64(0x0F0E0D0C0B0A0908, relocInfo::none);
1254     __ emit_data64(0x1716151413121110, relocInfo::none);
1255     __ emit_data64(0x1F1E1D1C1B1A1918, relocInfo::none);
1256     __ emit_data64(0x2726252423222120, relocInfo::none);
1257     __ emit_data64(0x2F2E2D2C2B2A2928, relocInfo::none);
1258     __ emit_data64(0x3736353433323130, relocInfo::none);
1259     __ emit_data64(0x3F3E3D3C3B3A3938, relocInfo::none);
1260     return start;
1261   }
1262 
1263   address generate_fp_mask(const char *stub_name, int64_t mask) {
1264     __ align(CodeEntryAlignment);
1265     StubCodeMark mark(this, "StubRoutines", stub_name);
1266     address start = __ pc();
1267 
1268     __ emit_data64( mask, relocInfo::none );
1269     __ emit_data64( mask, relocInfo::none );
1270 
1271     return start;
1272   }
1273 
1274   address generate_vector_fp_mask(const char *stub_name, int64_t mask) {
1275     __ align(CodeEntryAlignment);
1276     StubCodeMark mark(this, "StubRoutines", stub_name);
1277     address start = __ pc();
1278 
1279     __ emit_data64(mask, relocInfo::none);
1280     __ emit_data64(mask, relocInfo::none);
1281     __ emit_data64(mask, relocInfo::none);
1282     __ emit_data64(mask, relocInfo::none);


6210                                                 throw_AbstractMethodError));
6211 
6212     StubRoutines::_throw_IncompatibleClassChangeError_entry =
6213       generate_throw_exception("IncompatibleClassChangeError throw_exception",
6214                                CAST_FROM_FN_PTR(address,
6215                                                 SharedRuntime::
6216                                                 throw_IncompatibleClassChangeError));
6217 
6218     StubRoutines::_throw_NullPointerException_at_call_entry =
6219       generate_throw_exception("NullPointerException at call throw_exception",
6220                                CAST_FROM_FN_PTR(address,
6221                                                 SharedRuntime::
6222                                                 throw_NullPointerException_at_call));
6223 
6224     // entry points that are platform specific
6225     StubRoutines::x86::_f2i_fixup = generate_f2i_fixup();
6226     StubRoutines::x86::_f2l_fixup = generate_f2l_fixup();
6227     StubRoutines::x86::_d2i_fixup = generate_d2i_fixup();
6228     StubRoutines::x86::_d2l_fixup = generate_d2l_fixup();
6229 
6230     StubRoutines::x86::_vector_iota_indices     = generate_iota_indices("iota_indices");
6231     StubRoutines::x86::_float_sign_mask  = generate_fp_mask("float_sign_mask",  0x7FFFFFFF7FFFFFFF);
6232     StubRoutines::x86::_float_sign_flip  = generate_fp_mask("float_sign_flip",  0x8000000080000000);
6233     StubRoutines::x86::_double_sign_mask = generate_fp_mask("double_sign_mask", 0x7FFFFFFFFFFFFFFF);
6234     StubRoutines::x86::_double_sign_flip = generate_fp_mask("double_sign_flip", 0x8000000000000000);
6235     StubRoutines::x86::_vector_float_sign_mask = generate_vector_fp_mask("vector_float_sign_mask", 0x7FFFFFFF7FFFFFFF);
6236     StubRoutines::x86::_vector_float_sign_flip = generate_vector_fp_mask("vector_float_sign_flip", 0x8000000080000000);
6237     StubRoutines::x86::_vector_double_sign_mask = generate_vector_fp_mask("vector_double_sign_mask", 0x7FFFFFFFFFFFFFFF);
6238     StubRoutines::x86::_vector_double_sign_flip = generate_vector_fp_mask("vector_double_sign_flip", 0x8000000000000000);
6239     StubRoutines::x86::_vector_all_bits_set = generate_vector_fp_mask("vector_all_bits_set", 0xFFFFFFFFFFFFFFFF);
6240     StubRoutines::x86::_vector_byte_bitset = generate_vector_fp_mask("vector_byte_bitset", 0x0101010101010101);
6241     StubRoutines::x86::_vector_long_perm_mask = generate_vector_custom_i32("vector_long_perm_mask", Assembler::AVX_512bit,
6242                                                                            0, 2, 4, 6, 8, 10, 12, 14);
6243     StubRoutines::x86::_vector_short_to_byte_mask = generate_vector_fp_mask("vector_short_to_byte_mask", 0x00ff00ff00ff00ff);
6244     StubRoutines::x86::_vector_byte_perm_mask = generate_vector_byte_perm_mask("vector_byte_perm_mask");
6245     StubRoutines::x86::_vector_int_to_byte_mask = generate_vector_fp_mask("vector_int_to_byte_mask", 0x000000ff000000ff);
6246     StubRoutines::x86::_vector_int_to_short_mask = generate_vector_fp_mask("vector_int_to_short_mask", 0x0000ffff0000ffff);
6247     StubRoutines::x86::_vector_32_bit_mask = generate_vector_custom_i32("vector_32_bit_mask", Assembler::AVX_512bit,
6248                                                                         0xFFFFFFFF, 0, 0, 0);
6249     StubRoutines::x86::_vector_64_bit_mask = generate_vector_custom_i32("vector_64_bit_mask", Assembler::AVX_512bit,
6250                                                                         0xFFFFFFFF, 0xFFFFFFFF, 0, 0);


< prev index next >