| Index: runtime/vm/assembler_ia32_test.cc
|
| diff --git a/runtime/vm/assembler_ia32_test.cc b/runtime/vm/assembler_ia32_test.cc
|
| index 2a2c33d5e90a5b35b08bcc533df7928048bc45f4..476ebd87bf452d4d814668b9ed84a0e57f24193d 100644
|
| --- a/runtime/vm/assembler_ia32_test.cc
|
| +++ b/runtime/vm/assembler_ia32_test.cc
|
| @@ -834,378 +834,6 @@ ASSEMBLER_TEST_RUN(SingleFPOperations, entry) {
|
| }
|
|
|
|
|
| -ASSEMBLER_TEST_GENERATE(PackedFPOperations, assembler) {
|
| - __ movl(EAX, Immediate(bit_cast<int32_t, float>(12.3f)));
|
| - __ movd(XMM0, EAX);
|
| - __ shufps(XMM0, XMM0, Immediate(0x0));
|
| - __ movl(EAX, Immediate(bit_cast<int32_t, float>(3.4f)));
|
| - __ movd(XMM1, EAX);
|
| - __ shufps(XMM1, XMM1, Immediate(0x0));
|
| - __ addps(XMM0, XMM1); // 15.7f
|
| - __ mulps(XMM0, XMM1); // 53.38f
|
| - __ subps(XMM0, XMM1); // 49.98f
|
| - __ divps(XMM0, XMM1); // 14.7f
|
| - __ shufps(XMM0, XMM0, Immediate(0x55)); // Copy second lane into all 4 lanes.
|
| - __ pushl(EAX);
|
| - // Copy the low lane at ESP.
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedFPOperations, entry) {
|
| - typedef float (*PackedFPOperationsCode)();
|
| - float res = reinterpret_cast<PackedFPOperationsCode>(entry)();
|
| - EXPECT_FLOAT_EQ(14.7f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedFPOperations2, assembler) {
|
| - __ movl(EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ movd(XMM0, EAX);
|
| - __ shufps(XMM0, XMM0, Immediate(0x0));
|
| -
|
| - __ movaps(XMM1, XMM0); // Copy XMM0
|
| - __ reciprocalps(XMM1); // 0.25
|
| - __ sqrtps(XMM1); // 0.5
|
| - __ rsqrtps(XMM0); // ~0.5
|
| - __ subps(XMM0, XMM1); // ~0.0
|
| - __ shufps(XMM0, XMM0, Immediate(0x00)); // Copy second lane into all 4 lanes.
|
| - __ pushl(EAX);
|
| - // Copy the low lane at ESP.
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedFPOperations2, entry) {
|
| - typedef float (*PackedFPOperations2Code)();
|
| - float res = reinterpret_cast<PackedFPOperations2Code>(entry)();
|
| - EXPECT_FLOAT_EQ(0.0f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedCompareEQ, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ cmppseq(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedCompareEQ, entry) {
|
| - typedef uint32_t (*PackedCompareEQCode)();
|
| - uint32_t res = reinterpret_cast<PackedCompareEQCode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0x0), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedCompareNEQ, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ cmppsneq(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedCompareNEQ, entry) {
|
| - typedef uint32_t (*PackedCompareNEQCode)();
|
| - uint32_t res = reinterpret_cast<PackedCompareNEQCode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0xFFFFFFFF), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedCompareLT, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ cmppslt(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedCompareLT, entry) {
|
| - typedef uint32_t (*PackedCompareLTCode)();
|
| - uint32_t res = reinterpret_cast<PackedCompareLTCode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0xFFFFFFFF), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedCompareLE, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ cmppsle(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedCompareLE, entry) {
|
| - typedef uint32_t (*PackedCompareLECode)();
|
| - uint32_t res = reinterpret_cast<PackedCompareLECode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0xFFFFFFFF), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedCompareNLT, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ cmppsnlt(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedCompareNLT, entry) {
|
| - typedef uint32_t (*PackedCompareNLTCode)();
|
| - uint32_t res = reinterpret_cast<PackedCompareNLTCode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0x0), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedCompareNLE, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ cmppsnle(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedCompareNLE, entry) {
|
| - typedef uint32_t (*PackedCompareNLECode)();
|
| - uint32_t res = reinterpret_cast<PackedCompareNLECode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0x0), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedNegate, assembler) {
|
| - __ movl(EAX, Immediate(bit_cast<int32_t, float>(12.3f)));
|
| - __ movd(XMM0, EAX);
|
| - __ shufps(XMM0, XMM0, Immediate(0x0));
|
| - __ negateps(XMM0);
|
| - __ shufps(XMM0, XMM0, Immediate(0xAA)); // Copy third lane into all 4 lanes.
|
| - __ pushl(EAX);
|
| - // Copy the low lane at ESP.
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedNegate, entry) {
|
| - typedef float (*PackedNegateCode)();
|
| - float res = reinterpret_cast<PackedNegateCode>(entry)();
|
| - EXPECT_FLOAT_EQ(-12.3f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedAbsolute, assembler) {
|
| - __ movl(EAX, Immediate(bit_cast<int32_t, float>(-15.3f)));
|
| - __ movd(XMM0, EAX);
|
| - __ shufps(XMM0, XMM0, Immediate(0x0));
|
| - __ absps(XMM0);
|
| - __ shufps(XMM0, XMM0, Immediate(0xAA)); // Copy third lane into all 4 lanes.
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedAbsolute, entry) {
|
| - typedef float (*PackedAbsoluteCode)();
|
| - float res = reinterpret_cast<PackedAbsoluteCode>(entry)();
|
| - EXPECT_FLOAT_EQ(15.3f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedSetWZero, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(12.3f)));
|
| - __ zerowps(XMM0);
|
| - __ shufps(XMM0, XMM0, Immediate(0xFF)); // Copy the W lane which is now 0.0.
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedSetWZero, entry) {
|
| - typedef float (*PackedSetWZeroCode)();
|
| - float res = reinterpret_cast<PackedSetWZeroCode>(entry)();
|
| - EXPECT_FLOAT_EQ(0.0f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedMin, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ minps(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedMin, entry) {
|
| - typedef float (*PackedMinCode)();
|
| - float res = reinterpret_cast<PackedMinCode>(entry)();
|
| - EXPECT_FLOAT_EQ(2.0f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedMax, assembler) {
|
| - __ set1ps(XMM0, EAX, Immediate(bit_cast<int32_t, float>(2.0f)));
|
| - __ set1ps(XMM1, EAX, Immediate(bit_cast<int32_t, float>(4.0f)));
|
| - __ maxps(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedMax, entry) {
|
| - typedef float (*PackedMaxCode)();
|
| - float res = reinterpret_cast<PackedMaxCode>(entry)();
|
| - EXPECT_FLOAT_EQ(4.0f, res, 0.001f);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedLogicalOr, assembler) {
|
| - static const struct ALIGN16 {
|
| - uint32_t a;
|
| - uint32_t b;
|
| - uint32_t c;
|
| - uint32_t d;
|
| - } constant1 =
|
| - { 0xF0F0F0F0, 0xF0F0F0F0, 0xF0F0F0F0, 0xF0F0F0F0 };
|
| - static const struct ALIGN16 {
|
| - uint32_t a;
|
| - uint32_t b;
|
| - uint32_t c;
|
| - uint32_t d;
|
| - } constant2 =
|
| - { 0x0F0F0F0F, 0x0F0F0F0F, 0x0F0F0F0F, 0x0F0F0F0F };
|
| - __ movups(XMM0, Address::Absolute(reinterpret_cast<uword>(&constant1)));
|
| - __ movups(XMM1, Address::Absolute(reinterpret_cast<uword>(&constant2)));
|
| - __ orps(XMM0, XMM1);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedLogicalOr, entry) {
|
| - typedef uint32_t (*PackedLogicalOrCode)();
|
| - uint32_t res = reinterpret_cast<PackedLogicalOrCode>(entry)();
|
| - EXPECT_EQ(0xFFFFFFFF, res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedLogicalAnd, assembler) {
|
| - static const struct ALIGN16 {
|
| - uint32_t a;
|
| - uint32_t b;
|
| - uint32_t c;
|
| - uint32_t d;
|
| - } constant1 =
|
| - { 0xF0F0F0F0, 0xF0F0F0F0, 0xF0F0F0F0, 0xF0F0F0F0 };
|
| - static const struct ALIGN16 {
|
| - uint32_t a;
|
| - uint32_t b;
|
| - uint32_t c;
|
| - uint32_t d;
|
| - } constant2 =
|
| - { 0x0F0FFF0F, 0x0F0F0F0F, 0x0F0F0F0F, 0x0F0F0F0F };
|
| - __ movups(XMM0, Address::Absolute(reinterpret_cast<uword>(&constant1)));
|
| - __ andps(XMM0, Address::Absolute(reinterpret_cast<uword>(&constant2)));
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedLogicalAnd, entry) {
|
| - typedef uint32_t (*PackedLogicalAndCode)();
|
| - uint32_t res = reinterpret_cast<PackedLogicalAndCode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0x0000F000), res);
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_GENERATE(PackedLogicalNot, assembler) {
|
| - static const struct ALIGN16 {
|
| - uint32_t a;
|
| - uint32_t b;
|
| - uint32_t c;
|
| - uint32_t d;
|
| - } constant1 =
|
| - { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
|
| - __ movups(XMM0, Address::Absolute(reinterpret_cast<uword>(&constant1)));
|
| - __ notps(XMM0);
|
| - // Copy the low lane at ESP.
|
| - __ pushl(EAX);
|
| - __ movss(Address(ESP, 0), XMM0);
|
| - __ flds(Address(ESP, 0));
|
| - __ popl(EAX);
|
| - __ ret();
|
| -}
|
| -
|
| -
|
| -ASSEMBLER_TEST_RUN(PackedLogicalNot, entry) {
|
| - typedef uint32_t (*PackedLogicalNotCode)();
|
| - uint32_t res = reinterpret_cast<PackedLogicalNotCode>(entry)();
|
| - EXPECT_EQ(static_cast<uword>(0x0), res);
|
| -}
|
| -
|
| -
|
| ASSEMBLER_TEST_GENERATE(SingleFPOperationsStack, assembler) {
|
| __ movl(EAX, Immediate(bit_cast<int32_t, float>(12.3f)));
|
| __ movd(XMM0, EAX);
|
|
|