blob: 238291f44df3ad1d602b690f6e024a545d416ba4 [file] [log] [blame]
// Copyright 2011 Google Inc. All Rights Reserved.
#include "globals.h"
#include "managed_register_arm.h"
#include "gtest/gtest.h"
namespace art {
TEST(ManagedRegister, NoRegister) {
ManagedRegister reg = ManagedRegister::NoRegister();
EXPECT_TRUE(reg.IsNoRegister());
EXPECT_TRUE(!reg.Overlaps(reg));
}
TEST(ManagedRegister, CoreRegister) {
ManagedRegister reg = ManagedRegister::FromCoreRegister(R0);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(R0, reg.AsCoreRegister());
reg = ManagedRegister::FromCoreRegister(R1);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(R1, reg.AsCoreRegister());
reg = ManagedRegister::FromCoreRegister(R8);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(R8, reg.AsCoreRegister());
reg = ManagedRegister::FromCoreRegister(R15);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(R15, reg.AsCoreRegister());
}
TEST(ManagedRegister, SRegister) {
ManagedRegister reg = ManagedRegister::FromSRegister(S0);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(S0, reg.AsSRegister());
reg = ManagedRegister::FromSRegister(S1);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(S1, reg.AsSRegister());
reg = ManagedRegister::FromSRegister(S3);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(S3, reg.AsSRegister());
reg = ManagedRegister::FromSRegister(S15);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(S15, reg.AsSRegister());
reg = ManagedRegister::FromSRegister(S30);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(S30, reg.AsSRegister());
reg = ManagedRegister::FromSRegister(S31);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(S31, reg.AsSRegister());
}
TEST(ManagedRegister, DRegister) {
ManagedRegister reg = ManagedRegister::FromDRegister(D0);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D0, reg.AsDRegister());
EXPECT_EQ(S0, reg.AsOverlappingDRegisterLow());
EXPECT_EQ(S1, reg.AsOverlappingDRegisterHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromSRegisterPair(S0)));
reg = ManagedRegister::FromDRegister(D1);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D1, reg.AsDRegister());
EXPECT_EQ(S2, reg.AsOverlappingDRegisterLow());
EXPECT_EQ(S3, reg.AsOverlappingDRegisterHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromSRegisterPair(S2)));
reg = ManagedRegister::FromDRegister(D6);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D6, reg.AsDRegister());
EXPECT_EQ(S12, reg.AsOverlappingDRegisterLow());
EXPECT_EQ(S13, reg.AsOverlappingDRegisterHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromSRegisterPair(S12)));
reg = ManagedRegister::FromDRegister(D14);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D14, reg.AsDRegister());
EXPECT_EQ(S28, reg.AsOverlappingDRegisterLow());
EXPECT_EQ(S29, reg.AsOverlappingDRegisterHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromSRegisterPair(S28)));
reg = ManagedRegister::FromDRegister(D15);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D15, reg.AsDRegister());
EXPECT_EQ(S30, reg.AsOverlappingDRegisterLow());
EXPECT_EQ(S31, reg.AsOverlappingDRegisterHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromSRegisterPair(S30)));
#ifdef VFPv3_D32
reg = ManagedRegister::FromDRegister(D16);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D16, reg.AsDRegister());
reg = ManagedRegister::FromDRegister(D18);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D18, reg.AsDRegister());
reg = ManagedRegister::FromDRegister(D30);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D30, reg.AsDRegister());
reg = ManagedRegister::FromDRegister(D31);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(!reg.IsRegisterPair());
EXPECT_EQ(D31, reg.AsDRegister());
#endif // VFPv3_D32
}
TEST(ManagedRegister, Pair) {
ManagedRegister reg = ManagedRegister::FromRegisterPair(R0_R1);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(reg.IsRegisterPair());
EXPECT_EQ(R0_R1, reg.AsRegisterPair());
EXPECT_EQ(R0, reg.AsRegisterPairLow());
EXPECT_EQ(R1, reg.AsRegisterPairHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromCoreRegisterPair(R0)));
reg = ManagedRegister::FromRegisterPair(R2_R3);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(reg.IsRegisterPair());
EXPECT_EQ(R2_R3, reg.AsRegisterPair());
EXPECT_EQ(R2, reg.AsRegisterPairLow());
EXPECT_EQ(R3, reg.AsRegisterPairHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromCoreRegisterPair(R2)));
reg = ManagedRegister::FromRegisterPair(R4_R5);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(reg.IsRegisterPair());
EXPECT_EQ(R4_R5, reg.AsRegisterPair());
EXPECT_EQ(R4, reg.AsRegisterPairLow());
EXPECT_EQ(R5, reg.AsRegisterPairHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromCoreRegisterPair(R4)));
reg = ManagedRegister::FromRegisterPair(R6_R7);
EXPECT_TRUE(!reg.IsNoRegister());
EXPECT_TRUE(!reg.IsCoreRegister());
EXPECT_TRUE(!reg.IsSRegister());
EXPECT_TRUE(!reg.IsDRegister());
EXPECT_TRUE(!reg.IsOverlappingDRegister());
EXPECT_TRUE(reg.IsRegisterPair());
EXPECT_EQ(R6_R7, reg.AsRegisterPair());
EXPECT_EQ(R6, reg.AsRegisterPairLow());
EXPECT_EQ(R7, reg.AsRegisterPairHigh());
EXPECT_TRUE(reg.Equals(ManagedRegister::FromCoreRegisterPair(R6)));
}
TEST(ManagedRegister, Equals) {
ManagedRegister no_reg = ManagedRegister::NoRegister();
EXPECT_TRUE(no_reg.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!no_reg.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!no_reg.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!no_reg.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!no_reg.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!no_reg.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_R0 = ManagedRegister::FromCoreRegister(R0);
EXPECT_TRUE(!reg_R0.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(reg_R0.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_R0.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_R0.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_R0.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_R0.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_R1 = ManagedRegister::FromCoreRegister(R1);
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(reg_R1.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_R1.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_R8 = ManagedRegister::FromCoreRegister(R8);
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(reg_R8.Equals(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_R8.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_S0 = ManagedRegister::FromSRegister(S0);
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(reg_S0.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_S0.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_S1 = ManagedRegister::FromSRegister(S1);
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(reg_S1.Equals(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_S1.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_S31 = ManagedRegister::FromSRegister(S31);
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(reg_S31.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_S31.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_D0 = ManagedRegister::FromDRegister(D0);
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(reg_D0.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_D0.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_D15 = ManagedRegister::FromDRegister(D15);
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(reg_D15.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(!reg_D15.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
#ifdef VFPv3_D32
ManagedRegister reg_D16 = ManagedRegister::FromDRegister(D16);
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(reg_D16.Equals(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg_D16.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_D30 = ManagedRegister::FromDRegister(D30);
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(reg_D30.Equals(ManagedRegister::FromDRegister(D30)));
EXPECT_TRUE(!reg_D30.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
ManagedRegister reg_D31 = ManagedRegister::FromDRegister(D30);
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromDRegister(D30)));
EXPECT_TRUE(reg_D31.Equals(ManagedRegister::FromDRegister(D31)));
EXPECT_TRUE(!reg_D31.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
#endif // VFPv3_D32
ManagedRegister reg_R0R1 = ManagedRegister::FromRegisterPair(R0_R1);
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(reg_R0R1.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg_R0R1.Equals(ManagedRegister::FromRegisterPair(R2_R3)));
ManagedRegister reg_R4R5 = ManagedRegister::FromRegisterPair(R4_R5);
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(reg_R4R5.Equals(ManagedRegister::FromRegisterPair(R4_R5)));
EXPECT_TRUE(!reg_R4R5.Equals(ManagedRegister::FromRegisterPair(R6_R7)));
ManagedRegister reg_R6R7 = ManagedRegister::FromRegisterPair(R6_R7);
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::NoRegister()));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg_R6R7.Equals(ManagedRegister::FromRegisterPair(R4_R5)));
EXPECT_TRUE(reg_R6R7.Equals(ManagedRegister::FromRegisterPair(R6_R7)));
}
TEST(ManagedRegister, Overlaps) {
ManagedRegister reg = ManagedRegister::FromCoreRegister(R0);
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromCoreRegister(R1);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromCoreRegister(R7);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromSRegister(S0);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromSRegister(S1);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromSRegister(S15);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromSRegister(S31);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromDRegister(D0);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromDRegister(D7);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromDRegister(D15);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
#ifdef VFPv3_D32
reg = ManagedRegister::FromDRegister(D16);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromDRegister(D31);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromDRegister(D31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
#endif // VFPv3_D32
reg = ManagedRegister::FromRegisterPair(R0_R1);
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
reg = ManagedRegister::FromRegisterPair(R4_R5);
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromCoreRegister(R8)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S2)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S15)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S30)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromSRegister(S31)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D0)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D1)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D7)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D15)));
#ifdef VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D16)));
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromDRegister(D31)));
#endif // VFPv3_D32
EXPECT_TRUE(!reg.Overlaps(ManagedRegister::FromRegisterPair(R0_R1)));
EXPECT_TRUE(reg.Overlaps(ManagedRegister::FromRegisterPair(R4_R5)));
}
} // namespace art