1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "globals.h" 18 #include "managed_register_arm.h" 19 #include "gtest/gtest.h" 20 21 namespace art { 22 namespace arm { 23 24 TEST(ArmManagedRegister, NoRegister) { 25 ArmManagedRegister reg = ManagedRegister::NoRegister().AsArm(); 26 EXPECT_TRUE(reg.IsNoRegister()); 27 EXPECT_TRUE(!reg.Overlaps(reg)); 28 } 29 30 TEST(ArmManagedRegister, CoreRegister) { 31 ArmManagedRegister reg = ArmManagedRegister::FromCoreRegister(R0); 32 EXPECT_TRUE(!reg.IsNoRegister()); 33 EXPECT_TRUE(reg.IsCoreRegister()); 34 EXPECT_TRUE(!reg.IsSRegister()); 35 EXPECT_TRUE(!reg.IsDRegister()); 36 EXPECT_TRUE(!reg.IsRegisterPair()); 37 EXPECT_EQ(R0, reg.AsCoreRegister()); 38 39 reg = ArmManagedRegister::FromCoreRegister(R1); 40 EXPECT_TRUE(!reg.IsNoRegister()); 41 EXPECT_TRUE(reg.IsCoreRegister()); 42 EXPECT_TRUE(!reg.IsSRegister()); 43 EXPECT_TRUE(!reg.IsDRegister()); 44 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 45 EXPECT_TRUE(!reg.IsRegisterPair()); 46 EXPECT_EQ(R1, reg.AsCoreRegister()); 47 48 reg = ArmManagedRegister::FromCoreRegister(R8); 49 EXPECT_TRUE(!reg.IsNoRegister()); 50 EXPECT_TRUE(reg.IsCoreRegister()); 51 EXPECT_TRUE(!reg.IsSRegister()); 52 EXPECT_TRUE(!reg.IsDRegister()); 53 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 54 EXPECT_TRUE(!reg.IsRegisterPair()); 55 EXPECT_EQ(R8, reg.AsCoreRegister()); 56 57 reg = ArmManagedRegister::FromCoreRegister(R15); 58 EXPECT_TRUE(!reg.IsNoRegister()); 59 EXPECT_TRUE(reg.IsCoreRegister()); 60 EXPECT_TRUE(!reg.IsSRegister()); 61 EXPECT_TRUE(!reg.IsDRegister()); 62 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 63 EXPECT_TRUE(!reg.IsRegisterPair()); 64 EXPECT_EQ(R15, reg.AsCoreRegister()); 65 } 66 67 68 TEST(ArmManagedRegister, SRegister) { 69 ArmManagedRegister reg = ArmManagedRegister::FromSRegister(S0); 70 EXPECT_TRUE(!reg.IsNoRegister()); 71 EXPECT_TRUE(!reg.IsCoreRegister()); 72 EXPECT_TRUE(reg.IsSRegister()); 73 EXPECT_TRUE(!reg.IsDRegister()); 74 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 75 EXPECT_TRUE(!reg.IsRegisterPair()); 76 EXPECT_EQ(S0, reg.AsSRegister()); 77 78 reg = ArmManagedRegister::FromSRegister(S1); 79 EXPECT_TRUE(!reg.IsNoRegister()); 80 EXPECT_TRUE(!reg.IsCoreRegister()); 81 EXPECT_TRUE(reg.IsSRegister()); 82 EXPECT_TRUE(!reg.IsDRegister()); 83 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 84 EXPECT_TRUE(!reg.IsRegisterPair()); 85 EXPECT_EQ(S1, reg.AsSRegister()); 86 87 reg = ArmManagedRegister::FromSRegister(S3); 88 EXPECT_TRUE(!reg.IsNoRegister()); 89 EXPECT_TRUE(!reg.IsCoreRegister()); 90 EXPECT_TRUE(reg.IsSRegister()); 91 EXPECT_TRUE(!reg.IsDRegister()); 92 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 93 EXPECT_TRUE(!reg.IsRegisterPair()); 94 EXPECT_EQ(S3, reg.AsSRegister()); 95 96 reg = ArmManagedRegister::FromSRegister(S15); 97 EXPECT_TRUE(!reg.IsNoRegister()); 98 EXPECT_TRUE(!reg.IsCoreRegister()); 99 EXPECT_TRUE(reg.IsSRegister()); 100 EXPECT_TRUE(!reg.IsDRegister()); 101 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 102 EXPECT_TRUE(!reg.IsRegisterPair()); 103 EXPECT_EQ(S15, reg.AsSRegister()); 104 105 reg = ArmManagedRegister::FromSRegister(S30); 106 EXPECT_TRUE(!reg.IsNoRegister()); 107 EXPECT_TRUE(!reg.IsCoreRegister()); 108 EXPECT_TRUE(reg.IsSRegister()); 109 EXPECT_TRUE(!reg.IsDRegister()); 110 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 111 EXPECT_TRUE(!reg.IsRegisterPair()); 112 EXPECT_EQ(S30, reg.AsSRegister()); 113 114 reg = ArmManagedRegister::FromSRegister(S31); 115 EXPECT_TRUE(!reg.IsNoRegister()); 116 EXPECT_TRUE(!reg.IsCoreRegister()); 117 EXPECT_TRUE(reg.IsSRegister()); 118 EXPECT_TRUE(!reg.IsDRegister()); 119 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 120 EXPECT_TRUE(!reg.IsRegisterPair()); 121 EXPECT_EQ(S31, reg.AsSRegister()); 122 } 123 124 125 TEST(ArmManagedRegister, DRegister) { 126 ArmManagedRegister reg = ArmManagedRegister::FromDRegister(D0); 127 EXPECT_TRUE(!reg.IsNoRegister()); 128 EXPECT_TRUE(!reg.IsCoreRegister()); 129 EXPECT_TRUE(!reg.IsSRegister()); 130 EXPECT_TRUE(reg.IsDRegister()); 131 EXPECT_TRUE(reg.IsOverlappingDRegister()); 132 EXPECT_TRUE(!reg.IsRegisterPair()); 133 EXPECT_EQ(D0, reg.AsDRegister()); 134 EXPECT_EQ(S0, reg.AsOverlappingDRegisterLow()); 135 EXPECT_EQ(S1, reg.AsOverlappingDRegisterHigh()); 136 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S0))); 137 138 reg = ArmManagedRegister::FromDRegister(D1); 139 EXPECT_TRUE(!reg.IsNoRegister()); 140 EXPECT_TRUE(!reg.IsCoreRegister()); 141 EXPECT_TRUE(!reg.IsSRegister()); 142 EXPECT_TRUE(reg.IsDRegister()); 143 EXPECT_TRUE(reg.IsOverlappingDRegister()); 144 EXPECT_TRUE(!reg.IsRegisterPair()); 145 EXPECT_EQ(D1, reg.AsDRegister()); 146 EXPECT_EQ(S2, reg.AsOverlappingDRegisterLow()); 147 EXPECT_EQ(S3, reg.AsOverlappingDRegisterHigh()); 148 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S2))); 149 150 reg = ArmManagedRegister::FromDRegister(D6); 151 EXPECT_TRUE(!reg.IsNoRegister()); 152 EXPECT_TRUE(!reg.IsCoreRegister()); 153 EXPECT_TRUE(!reg.IsSRegister()); 154 EXPECT_TRUE(reg.IsDRegister()); 155 EXPECT_TRUE(reg.IsOverlappingDRegister()); 156 EXPECT_TRUE(!reg.IsRegisterPair()); 157 EXPECT_EQ(D6, reg.AsDRegister()); 158 EXPECT_EQ(S12, reg.AsOverlappingDRegisterLow()); 159 EXPECT_EQ(S13, reg.AsOverlappingDRegisterHigh()); 160 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S12))); 161 162 reg = ArmManagedRegister::FromDRegister(D14); 163 EXPECT_TRUE(!reg.IsNoRegister()); 164 EXPECT_TRUE(!reg.IsCoreRegister()); 165 EXPECT_TRUE(!reg.IsSRegister()); 166 EXPECT_TRUE(reg.IsDRegister()); 167 EXPECT_TRUE(reg.IsOverlappingDRegister()); 168 EXPECT_TRUE(!reg.IsRegisterPair()); 169 EXPECT_EQ(D14, reg.AsDRegister()); 170 EXPECT_EQ(S28, reg.AsOverlappingDRegisterLow()); 171 EXPECT_EQ(S29, reg.AsOverlappingDRegisterHigh()); 172 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S28))); 173 174 reg = ArmManagedRegister::FromDRegister(D15); 175 EXPECT_TRUE(!reg.IsNoRegister()); 176 EXPECT_TRUE(!reg.IsCoreRegister()); 177 EXPECT_TRUE(!reg.IsSRegister()); 178 EXPECT_TRUE(reg.IsDRegister()); 179 EXPECT_TRUE(reg.IsOverlappingDRegister()); 180 EXPECT_TRUE(!reg.IsRegisterPair()); 181 EXPECT_EQ(D15, reg.AsDRegister()); 182 EXPECT_EQ(S30, reg.AsOverlappingDRegisterLow()); 183 EXPECT_EQ(S31, reg.AsOverlappingDRegisterHigh()); 184 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromSRegisterPair(S30))); 185 186 #ifdef VFPv3_D32 187 reg = ArmManagedRegister::FromDRegister(D16); 188 EXPECT_TRUE(!reg.IsNoRegister()); 189 EXPECT_TRUE(!reg.IsCoreRegister()); 190 EXPECT_TRUE(!reg.IsSRegister()); 191 EXPECT_TRUE(reg.IsDRegister()); 192 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 193 EXPECT_TRUE(!reg.IsRegisterPair()); 194 EXPECT_EQ(D16, reg.AsDRegister()); 195 196 reg = ArmManagedRegister::FromDRegister(D18); 197 EXPECT_TRUE(!reg.IsNoRegister()); 198 EXPECT_TRUE(!reg.IsCoreRegister()); 199 EXPECT_TRUE(!reg.IsSRegister()); 200 EXPECT_TRUE(reg.IsDRegister()); 201 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 202 EXPECT_TRUE(!reg.IsRegisterPair()); 203 EXPECT_EQ(D18, reg.AsDRegister()); 204 205 reg = ArmManagedRegister::FromDRegister(D30); 206 EXPECT_TRUE(!reg.IsNoRegister()); 207 EXPECT_TRUE(!reg.IsCoreRegister()); 208 EXPECT_TRUE(!reg.IsSRegister()); 209 EXPECT_TRUE(reg.IsDRegister()); 210 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 211 EXPECT_TRUE(!reg.IsRegisterPair()); 212 EXPECT_EQ(D30, reg.AsDRegister()); 213 214 reg = ArmManagedRegister::FromDRegister(D31); 215 EXPECT_TRUE(!reg.IsNoRegister()); 216 EXPECT_TRUE(!reg.IsCoreRegister()); 217 EXPECT_TRUE(!reg.IsSRegister()); 218 EXPECT_TRUE(reg.IsDRegister()); 219 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 220 EXPECT_TRUE(!reg.IsRegisterPair()); 221 EXPECT_EQ(D31, reg.AsDRegister()); 222 #endif // VFPv3_D32 223 } 224 225 226 TEST(ArmManagedRegister, Pair) { 227 ArmManagedRegister reg = ArmManagedRegister::FromRegisterPair(R0_R1); 228 EXPECT_TRUE(!reg.IsNoRegister()); 229 EXPECT_TRUE(!reg.IsCoreRegister()); 230 EXPECT_TRUE(!reg.IsSRegister()); 231 EXPECT_TRUE(!reg.IsDRegister()); 232 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 233 EXPECT_TRUE(reg.IsRegisterPair()); 234 EXPECT_EQ(R0_R1, reg.AsRegisterPair()); 235 EXPECT_EQ(R0, reg.AsRegisterPairLow()); 236 EXPECT_EQ(R1, reg.AsRegisterPairHigh()); 237 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R0))); 238 239 reg = ArmManagedRegister::FromRegisterPair(R1_R2); 240 EXPECT_TRUE(!reg.IsNoRegister()); 241 EXPECT_TRUE(!reg.IsCoreRegister()); 242 EXPECT_TRUE(!reg.IsSRegister()); 243 EXPECT_TRUE(!reg.IsDRegister()); 244 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 245 EXPECT_TRUE(reg.IsRegisterPair()); 246 EXPECT_EQ(R1_R2, reg.AsRegisterPair()); 247 EXPECT_EQ(R1, reg.AsRegisterPairLow()); 248 EXPECT_EQ(R2, reg.AsRegisterPairHigh()); 249 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R1))); 250 251 reg = ArmManagedRegister::FromRegisterPair(R2_R3); 252 EXPECT_TRUE(!reg.IsNoRegister()); 253 EXPECT_TRUE(!reg.IsCoreRegister()); 254 EXPECT_TRUE(!reg.IsSRegister()); 255 EXPECT_TRUE(!reg.IsDRegister()); 256 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 257 EXPECT_TRUE(reg.IsRegisterPair()); 258 EXPECT_EQ(R2_R3, reg.AsRegisterPair()); 259 EXPECT_EQ(R2, reg.AsRegisterPairLow()); 260 EXPECT_EQ(R3, reg.AsRegisterPairHigh()); 261 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R2))); 262 263 reg = ArmManagedRegister::FromRegisterPair(R4_R5); 264 EXPECT_TRUE(!reg.IsNoRegister()); 265 EXPECT_TRUE(!reg.IsCoreRegister()); 266 EXPECT_TRUE(!reg.IsSRegister()); 267 EXPECT_TRUE(!reg.IsDRegister()); 268 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 269 EXPECT_TRUE(reg.IsRegisterPair()); 270 EXPECT_EQ(R4_R5, reg.AsRegisterPair()); 271 EXPECT_EQ(R4, reg.AsRegisterPairLow()); 272 EXPECT_EQ(R5, reg.AsRegisterPairHigh()); 273 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R4))); 274 275 reg = ArmManagedRegister::FromRegisterPair(R6_R7); 276 EXPECT_TRUE(!reg.IsNoRegister()); 277 EXPECT_TRUE(!reg.IsCoreRegister()); 278 EXPECT_TRUE(!reg.IsSRegister()); 279 EXPECT_TRUE(!reg.IsDRegister()); 280 EXPECT_TRUE(!reg.IsOverlappingDRegister()); 281 EXPECT_TRUE(reg.IsRegisterPair()); 282 EXPECT_EQ(R6_R7, reg.AsRegisterPair()); 283 EXPECT_EQ(R6, reg.AsRegisterPairLow()); 284 EXPECT_EQ(R7, reg.AsRegisterPairHigh()); 285 EXPECT_TRUE(reg.Equals(ArmManagedRegister::FromCoreRegisterPair(R6))); 286 } 287 288 289 TEST(ArmManagedRegister, Equals) { 290 ManagedRegister no_reg = ManagedRegister::NoRegister(); 291 EXPECT_TRUE(no_reg.Equals(ArmManagedRegister::NoRegister())); 292 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromCoreRegister(R0))); 293 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromCoreRegister(R1))); 294 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromSRegister(S0))); 295 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromDRegister(D0))); 296 EXPECT_TRUE(!no_reg.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 297 298 ArmManagedRegister reg_R0 = ArmManagedRegister::FromCoreRegister(R0); 299 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::NoRegister())); 300 EXPECT_TRUE(reg_R0.Equals(ArmManagedRegister::FromCoreRegister(R0))); 301 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromCoreRegister(R1))); 302 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromSRegister(S0))); 303 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromDRegister(D0))); 304 EXPECT_TRUE(!reg_R0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 305 306 ArmManagedRegister reg_R1 = ArmManagedRegister::FromCoreRegister(R1); 307 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::NoRegister())); 308 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromCoreRegister(R0))); 309 EXPECT_TRUE(reg_R1.Equals(ArmManagedRegister::FromCoreRegister(R1))); 310 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromSRegister(S0))); 311 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromDRegister(D0))); 312 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromSRegister(S1))); 313 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromDRegister(D1))); 314 EXPECT_TRUE(!reg_R1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 315 316 ArmManagedRegister reg_R8 = ArmManagedRegister::FromCoreRegister(R8); 317 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::NoRegister())); 318 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromCoreRegister(R0))); 319 EXPECT_TRUE(reg_R8.Equals(ArmManagedRegister::FromCoreRegister(R8))); 320 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromSRegister(S0))); 321 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromDRegister(D0))); 322 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromSRegister(S1))); 323 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromDRegister(D1))); 324 EXPECT_TRUE(!reg_R8.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 325 326 ArmManagedRegister reg_S0 = ArmManagedRegister::FromSRegister(S0); 327 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::NoRegister())); 328 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromCoreRegister(R0))); 329 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromCoreRegister(R1))); 330 EXPECT_TRUE(reg_S0.Equals(ArmManagedRegister::FromSRegister(S0))); 331 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromSRegister(S1))); 332 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromDRegister(D0))); 333 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromDRegister(D1))); 334 EXPECT_TRUE(!reg_S0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 335 336 ArmManagedRegister reg_S1 = ArmManagedRegister::FromSRegister(S1); 337 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::NoRegister())); 338 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromCoreRegister(R0))); 339 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromCoreRegister(R1))); 340 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromSRegister(S0))); 341 EXPECT_TRUE(reg_S1.Equals(ArmManagedRegister::FromSRegister(S1))); 342 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromDRegister(D0))); 343 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromDRegister(D1))); 344 EXPECT_TRUE(!reg_S1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 345 346 ArmManagedRegister reg_S31 = ArmManagedRegister::FromSRegister(S31); 347 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::NoRegister())); 348 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromCoreRegister(R0))); 349 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromCoreRegister(R1))); 350 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromSRegister(S0))); 351 EXPECT_TRUE(reg_S31.Equals(ArmManagedRegister::FromSRegister(S31))); 352 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromDRegister(D0))); 353 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromDRegister(D1))); 354 EXPECT_TRUE(!reg_S31.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 355 356 ArmManagedRegister reg_D0 = ArmManagedRegister::FromDRegister(D0); 357 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::NoRegister())); 358 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromCoreRegister(R0))); 359 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromCoreRegister(R1))); 360 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromSRegister(S0))); 361 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromSRegister(S31))); 362 EXPECT_TRUE(reg_D0.Equals(ArmManagedRegister::FromDRegister(D0))); 363 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromDRegister(D1))); 364 EXPECT_TRUE(!reg_D0.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 365 366 ArmManagedRegister reg_D15 = ArmManagedRegister::FromDRegister(D15); 367 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::NoRegister())); 368 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromCoreRegister(R0))); 369 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromCoreRegister(R1))); 370 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromSRegister(S0))); 371 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromSRegister(S31))); 372 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromDRegister(D0))); 373 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromDRegister(D1))); 374 EXPECT_TRUE(reg_D15.Equals(ArmManagedRegister::FromDRegister(D15))); 375 EXPECT_TRUE(!reg_D15.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 376 377 #ifdef VFPv3_D32 378 ArmManagedRegister reg_D16 = ArmManagedRegister::FromDRegister(D16); 379 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::NoRegister())); 380 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromCoreRegister(R0))); 381 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromCoreRegister(R1))); 382 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromSRegister(S0))); 383 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromSRegister(S31))); 384 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D0))); 385 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D1))); 386 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromDRegister(D15))); 387 EXPECT_TRUE(reg_D16.Equals(ArmManagedRegister::FromDRegister(D16))); 388 EXPECT_TRUE(!reg_D16.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 389 390 ArmManagedRegister reg_D30 = ArmManagedRegister::FromDRegister(D30); 391 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::NoRegister())); 392 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromCoreRegister(R0))); 393 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromCoreRegister(R1))); 394 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromSRegister(S0))); 395 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromSRegister(S31))); 396 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D0))); 397 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D1))); 398 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D15))); 399 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromDRegister(D16))); 400 EXPECT_TRUE(reg_D30.Equals(ArmManagedRegister::FromDRegister(D30))); 401 EXPECT_TRUE(!reg_D30.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 402 403 ArmManagedRegister reg_D31 = ArmManagedRegister::FromDRegister(D30); 404 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::NoRegister())); 405 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromCoreRegister(R0))); 406 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromCoreRegister(R1))); 407 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromSRegister(S0))); 408 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromSRegister(S31))); 409 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D0))); 410 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D1))); 411 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D15))); 412 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D16))); 413 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromDRegister(D30))); 414 EXPECT_TRUE(reg_D31.Equals(ArmManagedRegister::FromDRegister(D31))); 415 EXPECT_TRUE(!reg_D31.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 416 #endif // VFPv3_D32 417 418 ArmManagedRegister reg_R0R1 = ArmManagedRegister::FromRegisterPair(R0_R1); 419 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::NoRegister())); 420 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromCoreRegister(R0))); 421 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromCoreRegister(R1))); 422 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromSRegister(S0))); 423 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromSRegister(S31))); 424 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D0))); 425 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D1))); 426 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromDRegister(D15))); 427 EXPECT_TRUE(reg_R0R1.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 428 EXPECT_TRUE(!reg_R0R1.Equals(ArmManagedRegister::FromRegisterPair(R2_R3))); 429 430 ArmManagedRegister reg_R4R5 = ArmManagedRegister::FromRegisterPair(R4_R5); 431 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::NoRegister())); 432 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromCoreRegister(R0))); 433 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromCoreRegister(R1))); 434 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromSRegister(S0))); 435 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromSRegister(S31))); 436 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D0))); 437 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D1))); 438 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromDRegister(D15))); 439 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 440 EXPECT_TRUE(reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R4_R5))); 441 EXPECT_TRUE(!reg_R4R5.Equals(ArmManagedRegister::FromRegisterPair(R6_R7))); 442 443 ArmManagedRegister reg_R6R7 = ArmManagedRegister::FromRegisterPair(R6_R7); 444 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::NoRegister())); 445 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromCoreRegister(R0))); 446 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromCoreRegister(R1))); 447 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromSRegister(S0))); 448 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromSRegister(S31))); 449 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D0))); 450 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D1))); 451 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromDRegister(D15))); 452 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R0_R1))); 453 EXPECT_TRUE(!reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R4_R5))); 454 EXPECT_TRUE(reg_R6R7.Equals(ArmManagedRegister::FromRegisterPair(R6_R7))); 455 } 456 457 458 TEST(ArmManagedRegister, Overlaps) { 459 ArmManagedRegister reg = ArmManagedRegister::FromCoreRegister(R0); 460 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 461 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 462 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 463 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 464 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 465 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 466 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 467 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 468 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 469 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 470 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 471 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 472 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 473 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 474 #ifdef VFPv3_D32 475 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 476 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 477 #endif // VFPv3_D32 478 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 479 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 480 481 reg = ArmManagedRegister::FromCoreRegister(R1); 482 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 483 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 484 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 485 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 486 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 487 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 488 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 489 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 490 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 491 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 492 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 493 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 494 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 495 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 496 #ifdef VFPv3_D32 497 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 498 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 499 #endif // VFPv3_D32 500 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 501 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 502 503 reg = ArmManagedRegister::FromCoreRegister(R7); 504 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 505 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 506 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 507 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 508 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 509 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 510 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 511 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 512 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 513 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 514 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 515 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 516 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 517 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 518 #ifdef VFPv3_D32 519 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 520 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 521 #endif // VFPv3_D32 522 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 523 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 524 525 reg = ArmManagedRegister::FromSRegister(S0); 526 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 527 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 528 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 529 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 530 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 531 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 532 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 533 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 534 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 535 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 536 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 537 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 538 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 539 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 540 #ifdef VFPv3_D32 541 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 542 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 543 #endif // VFPv3_D32 544 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 545 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 546 547 reg = ArmManagedRegister::FromSRegister(S1); 548 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 549 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 550 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 551 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 552 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 553 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 554 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 555 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 556 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 557 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 558 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 559 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 560 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 561 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 562 #ifdef VFPv3_D32 563 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 564 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 565 #endif // VFPv3_D32 566 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 567 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 568 569 reg = ArmManagedRegister::FromSRegister(S15); 570 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 571 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 572 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 573 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 574 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 575 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 576 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 577 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 578 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 579 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 580 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 581 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 582 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 583 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 584 #ifdef VFPv3_D32 585 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 586 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 587 #endif // VFPv3_D32 588 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 589 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 590 591 reg = ArmManagedRegister::FromSRegister(S31); 592 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 593 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 594 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 595 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 596 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 597 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 598 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 599 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 600 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 601 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 602 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 603 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 604 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 605 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 606 #ifdef VFPv3_D32 607 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 608 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 609 #endif // VFPv3_D32 610 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 611 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 612 613 reg = ArmManagedRegister::FromDRegister(D0); 614 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 615 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 616 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 617 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 618 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 619 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 620 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 621 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 622 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 623 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 624 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 625 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 626 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 627 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 628 #ifdef VFPv3_D32 629 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 630 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 631 #endif // VFPv3_D32 632 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 633 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 634 635 reg = ArmManagedRegister::FromDRegister(D7); 636 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 637 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 638 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 639 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 640 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 641 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 642 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 643 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 644 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 645 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 646 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 647 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 648 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 649 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 650 #ifdef VFPv3_D32 651 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 652 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 653 #endif // VFPv3_D32 654 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 655 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 656 657 reg = ArmManagedRegister::FromDRegister(D15); 658 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 659 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 660 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 661 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 662 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 663 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 664 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 665 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 666 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 667 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 668 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 669 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 670 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 671 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 672 #ifdef VFPv3_D32 673 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 674 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 675 #endif // VFPv3_D32 676 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 677 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 678 679 #ifdef VFPv3_D32 680 reg = ArmManagedRegister::FromDRegister(D16); 681 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 682 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 683 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 684 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 685 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 686 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 687 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 688 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 689 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 690 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 691 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 692 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 693 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 694 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 695 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 696 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 697 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 698 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 699 700 reg = ArmManagedRegister::FromDRegister(D31); 701 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 702 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 703 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 704 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 705 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 706 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 707 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 708 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 709 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 710 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 711 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 712 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 713 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 714 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 715 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 716 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 717 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 718 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 719 #endif // VFPv3_D32 720 721 reg = ArmManagedRegister::FromRegisterPair(R0_R1); 722 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 723 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 724 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 725 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 726 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 727 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 728 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 729 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 730 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 731 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 732 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 733 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 734 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 735 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 736 #ifdef VFPv3_D32 737 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 738 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 739 #endif // VFPv3_D32 740 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 741 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 742 743 reg = ArmManagedRegister::FromRegisterPair(R4_R5); 744 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R0))); 745 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R1))); 746 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R7))); 747 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromCoreRegister(R8))); 748 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S0))); 749 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S1))); 750 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S2))); 751 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S15))); 752 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S30))); 753 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromSRegister(S31))); 754 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D0))); 755 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D1))); 756 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D7))); 757 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D15))); 758 #ifdef VFPv3_D32 759 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D16))); 760 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromDRegister(D31))); 761 #endif // VFPv3_D32 762 EXPECT_TRUE(!reg.Overlaps(ArmManagedRegister::FromRegisterPair(R0_R1))); 763 EXPECT_TRUE(reg.Overlaps(ArmManagedRegister::FromRegisterPair(R4_R5))); 764 } 765 766 } // namespace arm 767 } // namespace art 768