< prev index next >
src/hotspot/cpu/x86/assembler_x86.cpp
Print this page
@@ -7281,13 +7281,11 @@
void Assembler::decl(Register dst) {
// Don't use it directly. Use MacroAssembler::decrementl() instead.
emit_int8(0x48 | dst->encoding());
}
-#endif // _LP64
-
-// 64bit typically doesn't use the x87 but needs to for the trig funcs
+// 64bit doesn't use the x87
void Assembler::fabs() {
emit_int8((unsigned char)0xD9);
emit_int8((unsigned char)0xE1);
}
@@ -7718,10 +7716,11 @@
void Assembler::fldl2e() {
emit_int8((unsigned char)0xD9);
emit_int8((unsigned char)0xEA);
}
+#endif // !_LP64
// SSE SIMD prefix byte values corresponding to VexSimdPrefix encoding.
static int simd_pre[4] = { 0, 0x66, 0xF3, 0xF2 };
// SSE opcode second byte values (first is 0x0F) corresponding to VexOpcode encoding.
static int simd_opc[4] = { 0, 0, 0x38, 0x3A };
@@ -8805,10 +8804,22 @@
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
emit_int8(0x2A);
emit_operand(dst, src);
}
+void Assembler::cvttsd2siq(Register dst, Address src) {
+ NOT_LP64(assert(VM_Version::supports_sse2(), ""));
+ // F2 REX.W 0F 2C /r
+ // CVTTSD2SI r64, xmm1/m64
+ InstructionMark im(this);
+ emit_int8((unsigned char)0xF2);
+ prefix(REX_W);
+ emit_int8(0x0F);
+ emit_int8(0x2C);
+ emit_operand(dst, src);
+}
+
void Assembler::cvttsd2siq(Register dst, XMMRegister src) {
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
InstructionAttr attributes(AVX_128bit, /* rex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
int encode = simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
emit_int8(0x2C);
< prev index next >