diff options
author | Clement Courbet <courbet@google.com> | 2018-10-19 09:56:54 +0000 |
---|---|---|
committer | Clement Courbet <courbet@google.com> | 2018-10-19 09:56:54 +0000 |
commit | d6be509b7567ffd83b2616bd308068b85bd275cc (patch) | |
tree | af8fc94afffa66d25f4ced1fbf3b0a74147bb53a /unittests | |
parent | 5eae65a2bb3c2d8c86a7c911d1bd433ccd14ddd3 (diff) |
[llvm-exegesis] X87 RFP setup code.
Summary:
This was lost during refactoring in rL342644.
Fix and simplify simplify value size handling: always go through a 80 bit value,
because the value can be 1 byte). Add unit tests.
Reviewers: gchatelet
Subscribers: tschuett, llvm-commits
Differential Revision: https://reviews.llvm.org/D53423
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344779 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/tools/llvm-exegesis/X86/TargetTest.cpp | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/unittests/tools/llvm-exegesis/X86/TargetTest.cpp b/unittests/tools/llvm-exegesis/X86/TargetTest.cpp index 6e7554c8445..5ada03b2e9e 100644 --- a/unittests/tools/llvm-exegesis/X86/TargetTest.cpp +++ b/unittests/tools/llvm-exegesis/X86/TargetTest.cpp @@ -296,12 +296,17 @@ TEST_F(Core2Avx512TargetTest, SetRegToVR512Value) { IsStackDeallocate(64)})); } +// Note: We always put 80 bits on the stack independently of the size of the +// value. This uses a bit more space but makes the code simpler. + TEST_F(Core2TargetTest, SetRegToST0_32Bits) { EXPECT_THAT( setRegTo(llvm::X86::ST0, APInt(32, 0x11112222ULL)), - ElementsAre(IsStackAllocate(4), + ElementsAre(IsStackAllocate(10), IsMovValueToStack(llvm::X86::MOV32mi, 0x11112222UL, 0), - OpcodeIs(llvm::X86::LD_F32m), IsStackDeallocate(4))); + IsMovValueToStack(llvm::X86::MOV32mi, 0x00000000UL, 4), + IsMovValueToStack(llvm::X86::MOV16mi, 0x0000UL, 8), + OpcodeIs(llvm::X86::LD_F80m), IsStackDeallocate(10))); } TEST_F(Core2TargetTest, SetRegToST1_32Bits) { @@ -309,19 +314,22 @@ TEST_F(Core2TargetTest, SetRegToST1_32Bits) { llvm::MCInstBuilder(llvm::X86::ST_Frr).addReg(llvm::X86::ST1); EXPECT_THAT( setRegTo(llvm::X86::ST1, APInt(32, 0x11112222ULL)), - ElementsAre(IsStackAllocate(4), + ElementsAre(IsStackAllocate(10), IsMovValueToStack(llvm::X86::MOV32mi, 0x11112222UL, 0), - OpcodeIs(llvm::X86::LD_F32m), CopySt0ToSt1, - IsStackDeallocate(4))); + IsMovValueToStack(llvm::X86::MOV32mi, 0x00000000UL, 4), + IsMovValueToStack(llvm::X86::MOV16mi, 0x0000UL, 8), + OpcodeIs(llvm::X86::LD_F80m), CopySt0ToSt1, + IsStackDeallocate(10))); } TEST_F(Core2TargetTest, SetRegToST0_64Bits) { EXPECT_THAT( setRegTo(llvm::X86::ST0, APInt(64, 0x1111222233334444ULL)), - ElementsAre(IsStackAllocate(8), + ElementsAre(IsStackAllocate(10), IsMovValueToStack(llvm::X86::MOV32mi, 0x33334444UL, 0), IsMovValueToStack(llvm::X86::MOV32mi, 0x11112222UL, 4), - OpcodeIs(llvm::X86::LD_F64m), IsStackDeallocate(8))); + IsMovValueToStack(llvm::X86::MOV16mi, 0x0000UL, 8), + OpcodeIs(llvm::X86::LD_F80m), IsStackDeallocate(10))); } TEST_F(Core2TargetTest, SetRegToST0_80Bits) { @@ -334,5 +342,37 @@ TEST_F(Core2TargetTest, SetRegToST0_80Bits) { OpcodeIs(llvm::X86::LD_F80m), IsStackDeallocate(10))); } +TEST_F(Core2TargetTest, SetRegToFP0_80Bits) { + EXPECT_THAT( + setRegTo(llvm::X86::FP0, APInt(80, "11112222333344445555", 16)), + ElementsAre(IsStackAllocate(10), + IsMovValueToStack(llvm::X86::MOV32mi, 0x44445555UL, 0), + IsMovValueToStack(llvm::X86::MOV32mi, 0x22223333UL, 4), + IsMovValueToStack(llvm::X86::MOV16mi, 0x1111UL, 8), + OpcodeIs(llvm::X86::LD_Fp80m), IsStackDeallocate(10))); +} + +TEST_F(Core2TargetTest, SetRegToFP1_32Bits) { + EXPECT_THAT( + setRegTo(llvm::X86::FP1, APInt(32, 0x11112222ULL)), + ElementsAre(IsStackAllocate(10), + IsMovValueToStack(llvm::X86::MOV32mi, 0x11112222UL, 0), + IsMovValueToStack(llvm::X86::MOV32mi, 0x00000000UL, 4), + IsMovValueToStack(llvm::X86::MOV16mi, 0x0000UL, 8), + OpcodeIs(llvm::X86::LD_Fp80m), + IsStackDeallocate(10))); +} + +TEST_F(Core2TargetTest, SetRegToFP1_4Bits) { + EXPECT_THAT( + setRegTo(llvm::X86::FP1, APInt(4, 0x1ULL)), + ElementsAre(IsStackAllocate(10), + IsMovValueToStack(llvm::X86::MOV32mi, 0x00000001UL, 0), + IsMovValueToStack(llvm::X86::MOV32mi, 0x00000000UL, 4), + IsMovValueToStack(llvm::X86::MOV16mi, 0x0000UL, 8), + OpcodeIs(llvm::X86::LD_Fp80m), + IsStackDeallocate(10))); +} + } // namespace } // namespace exegesis |