}
+void X86Assembler::filds(const Address& src) {
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0xDB);
+ EmitOperand(0, src);
+}
+
+
void X86Assembler::fincstp() {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0xD9);
void fistpl(const Address& dst);
void fistps(const Address& dst);
void fildl(const Address& src);
+ void filds(const Address& src);
void fincstp();
void ffree(const Immediate& index);
DriverStr(expected, "lock_cmpxchg8b");
}
+TEST_F(AssemblerX86Test, FPUIntegerLoad) {
+ GetAssembler()->filds(x86::Address(x86::Register(x86::ESP), 4));
+ GetAssembler()->fildl(x86::Address(x86::Register(x86::ESP), 12));
+ const char* expected =
+ "fildl 0x4(%ESP)\n"
+ "fildll 0xc(%ESP)\n";
+ DriverStr(expected, "FPUIntegerLoad");
+}
+
+TEST_F(AssemblerX86Test, FPUIntegerStore) {
+ GetAssembler()->fistps(x86::Address(x86::Register(x86::ESP), 16));
+ GetAssembler()->fistpl(x86::Address(x86::Register(x86::ESP), 24));
+ const char* expected =
+ "fistpl 0x10(%ESP)\n"
+ "fistpll 0x18(%ESP)\n";
+ DriverStr(expected, "FPUIntegerStore");
+}
+
} // namespace art
}
+void X86_64Assembler::filds(const Address& src) {
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0xDB);
+ EmitOperand(0, src);
+}
+
+
void X86_64Assembler::fincstp() {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0xD9);
void fistpl(const Address& dst);
void fistps(const Address& dst);
void fildl(const Address& src);
+ void filds(const Address& src);
void fincstp();
void ffree(const Immediate& index);
DriverFn(&x87_fn, "x87");
}
+TEST_F(AssemblerX86_64Test, FPUIntegerLoad) {
+ GetAssembler()->filds(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
+ GetAssembler()->fildl(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 12));
+ const char* expected =
+ "fildl 0x4(%RSP)\n"
+ "fildll 0xc(%RSP)\n";
+ DriverStr(expected, "FPUIntegerLoad");
+}
+
+TEST_F(AssemblerX86_64Test, FPUIntegerStore) {
+ GetAssembler()->fistps(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 16));
+ GetAssembler()->fistpl(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 24));
+ const char* expected =
+ "fistpl 0x10(%RSP)\n"
+ "fistpll 0x18(%RSP)\n";
+ DriverStr(expected, "FPUIntegerStore");
+}
+
////////////////
// CALL / JMP //
////////////////