managed_register_arm64_test.cc revision 91690f6166f007699770f9a52be2b1a23e513307
1/* 2 * Copyright (C) 2014 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_arm64.h" 19#include "gtest/gtest.h" 20 21namespace art { 22namespace arm64 { 23 24TEST(Arm64ManagedRegister, NoRegister) { 25 Arm64ManagedRegister reg = ManagedRegister::NoRegister().AsArm64(); 26 EXPECT_TRUE(reg.IsNoRegister()); 27 EXPECT_TRUE(!reg.Overlaps(reg)); 28} 29 30// X Register test. 31TEST(Arm64ManagedRegister, CoreRegister) { 32 Arm64ManagedRegister reg = Arm64ManagedRegister::FromCoreRegister(X0); 33 Arm64ManagedRegister wreg = Arm64ManagedRegister::FromWRegister(W0); 34 EXPECT_TRUE(!reg.IsNoRegister()); 35 EXPECT_TRUE(reg.IsCoreRegister()); 36 EXPECT_TRUE(!reg.IsWRegister()); 37 EXPECT_TRUE(!reg.IsDRegister()); 38 EXPECT_TRUE(!reg.IsSRegister()); 39 EXPECT_TRUE(reg.Overlaps(wreg)); 40 EXPECT_EQ(X0, reg.AsCoreRegister()); 41 42 reg = Arm64ManagedRegister::FromCoreRegister(X1); 43 wreg = Arm64ManagedRegister::FromWRegister(W1); 44 EXPECT_TRUE(!reg.IsNoRegister()); 45 EXPECT_TRUE(reg.IsCoreRegister()); 46 EXPECT_TRUE(!reg.IsWRegister()); 47 EXPECT_TRUE(!reg.IsDRegister()); 48 EXPECT_TRUE(!reg.IsSRegister()); 49 EXPECT_TRUE(reg.Overlaps(wreg)); 50 EXPECT_EQ(X1, reg.AsCoreRegister()); 51 52 reg = Arm64ManagedRegister::FromCoreRegister(X7); 53 wreg = Arm64ManagedRegister::FromWRegister(W7); 54 EXPECT_TRUE(!reg.IsNoRegister()); 55 EXPECT_TRUE(reg.IsCoreRegister()); 56 EXPECT_TRUE(!reg.IsWRegister()); 57 EXPECT_TRUE(!reg.IsDRegister()); 58 EXPECT_TRUE(!reg.IsSRegister()); 59 EXPECT_TRUE(reg.Overlaps(wreg)); 60 EXPECT_EQ(X7, reg.AsCoreRegister()); 61 62 reg = Arm64ManagedRegister::FromCoreRegister(X15); 63 wreg = Arm64ManagedRegister::FromWRegister(W15); 64 EXPECT_TRUE(!reg.IsNoRegister()); 65 EXPECT_TRUE(reg.IsCoreRegister()); 66 EXPECT_TRUE(!reg.IsWRegister()); 67 EXPECT_TRUE(!reg.IsDRegister()); 68 EXPECT_TRUE(!reg.IsSRegister()); 69 EXPECT_TRUE(reg.Overlaps(wreg)); 70 EXPECT_EQ(X15, reg.AsCoreRegister()); 71 72 reg = Arm64ManagedRegister::FromCoreRegister(X19); 73 wreg = Arm64ManagedRegister::FromWRegister(W19); 74 EXPECT_TRUE(!reg.IsNoRegister()); 75 EXPECT_TRUE(reg.IsCoreRegister()); 76 EXPECT_TRUE(!reg.IsWRegister()); 77 EXPECT_TRUE(!reg.IsDRegister()); 78 EXPECT_TRUE(!reg.IsSRegister()); 79 EXPECT_TRUE(reg.Overlaps(wreg)); 80 EXPECT_EQ(X19, reg.AsCoreRegister()); 81 82 reg = Arm64ManagedRegister::FromCoreRegister(X16); 83 wreg = Arm64ManagedRegister::FromWRegister(W16); 84 EXPECT_TRUE(!reg.IsNoRegister()); 85 EXPECT_TRUE(reg.IsCoreRegister()); 86 EXPECT_TRUE(!reg.IsWRegister()); 87 EXPECT_TRUE(!reg.IsDRegister()); 88 EXPECT_TRUE(!reg.IsSRegister()); 89 EXPECT_TRUE(reg.Overlaps(wreg)); 90 EXPECT_EQ(IP0, reg.AsCoreRegister()); 91 92 reg = Arm64ManagedRegister::FromCoreRegister(SP); 93 wreg = Arm64ManagedRegister::FromWRegister(WZR); 94 EXPECT_TRUE(!reg.IsNoRegister()); 95 EXPECT_TRUE(reg.IsCoreRegister()); 96 EXPECT_TRUE(!reg.IsWRegister()); 97 EXPECT_TRUE(!reg.IsDRegister()); 98 EXPECT_TRUE(!reg.IsSRegister()); 99 EXPECT_TRUE(reg.Overlaps(wreg)); 100 EXPECT_EQ(SP, reg.AsCoreRegister()); 101} 102 103// W register test. 104TEST(Arm64ManagedRegister, WRegister) { 105 Arm64ManagedRegister reg = Arm64ManagedRegister::FromWRegister(W0); 106 Arm64ManagedRegister xreg = Arm64ManagedRegister::FromCoreRegister(X0); 107 EXPECT_TRUE(!reg.IsNoRegister()); 108 EXPECT_TRUE(!reg.IsCoreRegister()); 109 EXPECT_TRUE(reg.IsWRegister()); 110 EXPECT_TRUE(!reg.IsDRegister()); 111 EXPECT_TRUE(!reg.IsSRegister()); 112 EXPECT_TRUE(reg.Overlaps(xreg)); 113 EXPECT_EQ(W0, reg.AsWRegister()); 114 115 reg = Arm64ManagedRegister::FromWRegister(W5); 116 xreg = Arm64ManagedRegister::FromCoreRegister(X5); 117 EXPECT_TRUE(!reg.IsNoRegister()); 118 EXPECT_TRUE(!reg.IsCoreRegister()); 119 EXPECT_TRUE(reg.IsWRegister()); 120 EXPECT_TRUE(!reg.IsDRegister()); 121 EXPECT_TRUE(!reg.IsSRegister()); 122 EXPECT_TRUE(reg.Overlaps(xreg)); 123 EXPECT_EQ(W5, reg.AsWRegister()); 124 125 reg = Arm64ManagedRegister::FromWRegister(W6); 126 xreg = Arm64ManagedRegister::FromCoreRegister(X6); 127 EXPECT_TRUE(!reg.IsNoRegister()); 128 EXPECT_TRUE(!reg.IsCoreRegister()); 129 EXPECT_TRUE(reg.IsWRegister()); 130 EXPECT_TRUE(!reg.IsDRegister()); 131 EXPECT_TRUE(!reg.IsSRegister()); 132 EXPECT_TRUE(reg.Overlaps(xreg)); 133 EXPECT_EQ(W6, reg.AsWRegister()); 134 135 reg = Arm64ManagedRegister::FromWRegister(W18); 136 xreg = Arm64ManagedRegister::FromCoreRegister(X18); 137 EXPECT_TRUE(!reg.IsNoRegister()); 138 EXPECT_TRUE(!reg.IsCoreRegister()); 139 EXPECT_TRUE(reg.IsWRegister()); 140 EXPECT_TRUE(!reg.IsDRegister()); 141 EXPECT_TRUE(!reg.IsSRegister()); 142 EXPECT_TRUE(reg.Overlaps(xreg)); 143 EXPECT_EQ(W18, reg.AsWRegister()); 144 145 reg = Arm64ManagedRegister::FromWRegister(W29); 146 xreg = Arm64ManagedRegister::FromCoreRegister(FP); 147 EXPECT_TRUE(!reg.IsNoRegister()); 148 EXPECT_TRUE(!reg.IsCoreRegister()); 149 EXPECT_TRUE(reg.IsWRegister()); 150 EXPECT_TRUE(!reg.IsDRegister()); 151 EXPECT_TRUE(!reg.IsSRegister()); 152 EXPECT_TRUE(reg.Overlaps(xreg)); 153 EXPECT_EQ(W29, reg.AsWRegister()); 154 155 reg = Arm64ManagedRegister::FromWRegister(WZR); 156 xreg = Arm64ManagedRegister::FromCoreRegister(SP); 157 EXPECT_TRUE(!reg.IsNoRegister()); 158 EXPECT_TRUE(!reg.IsCoreRegister()); 159 EXPECT_TRUE(reg.IsWRegister()); 160 EXPECT_TRUE(!reg.IsDRegister()); 161 EXPECT_TRUE(!reg.IsSRegister()); 162 EXPECT_TRUE(reg.Overlaps(xreg)); 163 EXPECT_EQ(W31, reg.AsWRegister()); 164} 165 166// D Register test. 167TEST(Arm64ManagedRegister, DRegister) { 168 Arm64ManagedRegister reg = Arm64ManagedRegister::FromDRegister(D0); 169 Arm64ManagedRegister sreg = Arm64ManagedRegister::FromSRegister(S0); 170 EXPECT_TRUE(!reg.IsNoRegister()); 171 EXPECT_TRUE(!reg.IsCoreRegister()); 172 EXPECT_TRUE(!reg.IsWRegister()); 173 EXPECT_TRUE(reg.IsDRegister()); 174 EXPECT_TRUE(!reg.IsSRegister()); 175 EXPECT_TRUE(reg.Overlaps(sreg)); 176 EXPECT_EQ(D0, reg.AsDRegister()); 177 EXPECT_EQ(S0, reg.AsOverlappingDRegisterLow()); 178 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D0))); 179 180 reg = Arm64ManagedRegister::FromDRegister(D1); 181 sreg = Arm64ManagedRegister::FromSRegister(S1); 182 EXPECT_TRUE(!reg.IsNoRegister()); 183 EXPECT_TRUE(!reg.IsCoreRegister()); 184 EXPECT_TRUE(!reg.IsWRegister()); 185 EXPECT_TRUE(reg.IsDRegister()); 186 EXPECT_TRUE(!reg.IsSRegister()); 187 EXPECT_TRUE(reg.Overlaps(sreg)); 188 EXPECT_EQ(D1, reg.AsDRegister()); 189 EXPECT_EQ(S1, reg.AsOverlappingDRegisterLow()); 190 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D1))); 191 192 reg = Arm64ManagedRegister::FromDRegister(D20); 193 sreg = Arm64ManagedRegister::FromSRegister(S20); 194 EXPECT_TRUE(!reg.IsNoRegister()); 195 EXPECT_TRUE(!reg.IsCoreRegister()); 196 EXPECT_TRUE(!reg.IsWRegister()); 197 EXPECT_TRUE(reg.IsDRegister()); 198 EXPECT_TRUE(!reg.IsSRegister()); 199 EXPECT_TRUE(reg.Overlaps(sreg)); 200 EXPECT_EQ(D20, reg.AsDRegister()); 201 EXPECT_EQ(S20, reg.AsOverlappingDRegisterLow()); 202 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D20))); 203 204 reg = Arm64ManagedRegister::FromDRegister(D31); 205 sreg = Arm64ManagedRegister::FromSRegister(S31); 206 EXPECT_TRUE(!reg.IsNoRegister()); 207 EXPECT_TRUE(!reg.IsCoreRegister()); 208 EXPECT_TRUE(!reg.IsWRegister()); 209 EXPECT_TRUE(reg.IsDRegister()); 210 EXPECT_TRUE(!reg.IsSRegister()); 211 EXPECT_TRUE(reg.Overlaps(sreg)); 212 EXPECT_EQ(D31, reg.AsDRegister()); 213 EXPECT_EQ(S31, reg.AsOverlappingDRegisterLow()); 214 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D31))); 215} 216 217// S Register test. 218TEST(Arm64ManagedRegister, SRegister) { 219 Arm64ManagedRegister reg = Arm64ManagedRegister::FromSRegister(S0); 220 Arm64ManagedRegister dreg = Arm64ManagedRegister::FromDRegister(D0); 221 EXPECT_TRUE(!reg.IsNoRegister()); 222 EXPECT_TRUE(!reg.IsCoreRegister()); 223 EXPECT_TRUE(!reg.IsWRegister()); 224 EXPECT_TRUE(reg.IsSRegister()); 225 EXPECT_TRUE(!reg.IsDRegister()); 226 EXPECT_TRUE(reg.Overlaps(dreg)); 227 EXPECT_EQ(S0, reg.AsSRegister()); 228 EXPECT_EQ(D0, reg.AsOverlappingSRegisterD()); 229 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S0))); 230 231 reg = Arm64ManagedRegister::FromSRegister(S5); 232 dreg = Arm64ManagedRegister::FromDRegister(D5); 233 EXPECT_TRUE(!reg.IsNoRegister()); 234 EXPECT_TRUE(!reg.IsCoreRegister()); 235 EXPECT_TRUE(!reg.IsWRegister()); 236 EXPECT_TRUE(reg.IsSRegister()); 237 EXPECT_TRUE(!reg.IsDRegister()); 238 EXPECT_TRUE(reg.Overlaps(dreg)); 239 EXPECT_EQ(S5, reg.AsSRegister()); 240 EXPECT_EQ(D5, reg.AsOverlappingSRegisterD()); 241 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S5))); 242 243 reg = Arm64ManagedRegister::FromSRegister(S7); 244 dreg = Arm64ManagedRegister::FromDRegister(D7); 245 EXPECT_TRUE(!reg.IsNoRegister()); 246 EXPECT_TRUE(!reg.IsCoreRegister()); 247 EXPECT_TRUE(!reg.IsWRegister()); 248 EXPECT_TRUE(reg.IsSRegister()); 249 EXPECT_TRUE(!reg.IsDRegister()); 250 EXPECT_TRUE(reg.Overlaps(dreg)); 251 EXPECT_EQ(S7, reg.AsSRegister()); 252 EXPECT_EQ(D7, reg.AsOverlappingSRegisterD()); 253 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S7))); 254 255 reg = Arm64ManagedRegister::FromSRegister(S31); 256 dreg = Arm64ManagedRegister::FromDRegister(D31); 257 EXPECT_TRUE(!reg.IsNoRegister()); 258 EXPECT_TRUE(!reg.IsCoreRegister()); 259 EXPECT_TRUE(!reg.IsWRegister()); 260 EXPECT_TRUE(reg.IsSRegister()); 261 EXPECT_TRUE(!reg.IsDRegister()); 262 EXPECT_TRUE(reg.Overlaps(dreg)); 263 EXPECT_EQ(S31, reg.AsSRegister()); 264 EXPECT_EQ(D31, reg.AsOverlappingSRegisterD()); 265 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S31))); 266} 267 268TEST(Arm64ManagedRegister, Equals) { 269 ManagedRegister no_reg = ManagedRegister::NoRegister(); 270 EXPECT_TRUE(no_reg.Equals(Arm64ManagedRegister::NoRegister())); 271 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 272 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 273 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromWRegister(W0))); 274 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromWRegister(W1))); 275 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromDRegister(D0))); 276 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromSRegister(S0))); 277 278 Arm64ManagedRegister reg_X0 = Arm64ManagedRegister::FromCoreRegister(X0); 279 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::NoRegister())); 280 EXPECT_TRUE(reg_X0.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 281 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 282 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromWRegister(W0))); 283 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 284 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromDRegister(D0))); 285 286 Arm64ManagedRegister reg_X1 = Arm64ManagedRegister::FromCoreRegister(X1); 287 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::NoRegister())); 288 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 289 EXPECT_TRUE(reg_X1.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 290 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromWRegister(W1))); 291 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromDRegister(D0))); 292 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromSRegister(S0))); 293 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromDRegister(D1))); 294 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromSRegister(S1))); 295 296 Arm64ManagedRegister reg_X31 = Arm64ManagedRegister::FromCoreRegister(X31); 297 EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::NoRegister())); 298 // TODO: Fix the infrastructure, then re-enable. 299 // EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromCoreRegister(SP))); 300 // EXPECT_TRUE(reg_X31.Equals(Arm64ManagedRegister::FromCoreRegister(XZR))); 301 EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromWRegister(W31))); 302 EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromWRegister(WZR))); 303 EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromSRegister(S0))); 304 EXPECT_TRUE(!reg_X31.Equals(Arm64ManagedRegister::FromDRegister(D0))); 305 306 Arm64ManagedRegister reg_SP = Arm64ManagedRegister::FromCoreRegister(SP); 307 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::NoRegister())); 308 // TODO: We expect these to pass - SP has a different semantic than X31/XZR. 309 // EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromCoreRegister(X31))); 310 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromCoreRegister(XZR))); 311 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromWRegister(W31))); 312 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromSRegister(S0))); 313 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromDRegister(D0))); 314 315 Arm64ManagedRegister reg_W8 = Arm64ManagedRegister::FromWRegister(W8); 316 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::NoRegister())); 317 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 318 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromCoreRegister(X8))); 319 EXPECT_TRUE(reg_W8.Equals(Arm64ManagedRegister::FromWRegister(W8))); 320 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromDRegister(D0))); 321 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromSRegister(S0))); 322 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromDRegister(D1))); 323 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromSRegister(S1))); 324 325 Arm64ManagedRegister reg_W12 = Arm64ManagedRegister::FromWRegister(W12); 326 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::NoRegister())); 327 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 328 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromCoreRegister(X8))); 329 EXPECT_TRUE(reg_W12.Equals(Arm64ManagedRegister::FromWRegister(W12))); 330 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromDRegister(D0))); 331 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromSRegister(S0))); 332 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromDRegister(D1))); 333 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromSRegister(S1))); 334 335 Arm64ManagedRegister reg_S0 = Arm64ManagedRegister::FromSRegister(S0); 336 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::NoRegister())); 337 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 338 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 339 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromWRegister(W0))); 340 EXPECT_TRUE(reg_S0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 341 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromSRegister(S1))); 342 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromDRegister(D0))); 343 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromDRegister(D1))); 344 345 Arm64ManagedRegister reg_S1 = Arm64ManagedRegister::FromSRegister(S1); 346 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::NoRegister())); 347 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 348 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 349 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromWRegister(W0))); 350 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromSRegister(S0))); 351 EXPECT_TRUE(reg_S1.Equals(Arm64ManagedRegister::FromSRegister(S1))); 352 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromDRegister(D0))); 353 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromDRegister(D1))); 354 355 Arm64ManagedRegister reg_S31 = Arm64ManagedRegister::FromSRegister(S31); 356 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::NoRegister())); 357 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 358 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 359 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromWRegister(W0))); 360 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromSRegister(S0))); 361 EXPECT_TRUE(reg_S31.Equals(Arm64ManagedRegister::FromSRegister(S31))); 362 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromDRegister(D0))); 363 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromDRegister(D1))); 364 365 Arm64ManagedRegister reg_D0 = Arm64ManagedRegister::FromDRegister(D0); 366 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::NoRegister())); 367 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 368 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromWRegister(W1))); 369 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 370 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 371 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S31))); 372 EXPECT_TRUE(reg_D0.Equals(Arm64ManagedRegister::FromDRegister(D0))); 373 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromDRegister(D1))); 374 375 Arm64ManagedRegister reg_D15 = Arm64ManagedRegister::FromDRegister(D15); 376 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::NoRegister())); 377 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromCoreRegister(X0))); 378 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromCoreRegister(X1))); 379 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromWRegister(W0))); 380 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromSRegister(S0))); 381 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromSRegister(S31))); 382 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D0))); 383 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D1))); 384 EXPECT_TRUE(reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D15))); 385} 386 387TEST(Arm64ManagedRegister, Overlaps) { 388 Arm64ManagedRegister reg = Arm64ManagedRegister::FromCoreRegister(X0); 389 Arm64ManagedRegister reg_o = Arm64ManagedRegister::FromWRegister(W0); 390 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X0))); 391 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 392 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP))); 393 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W0))); 394 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 395 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 396 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 397 EXPECT_EQ(X0, reg_o.AsOverlappingWRegisterCore()); 398 EXPECT_EQ(W0, reg.AsOverlappingCoreRegisterLow()); 399 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 400 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 401 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 402 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 403 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 404 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 405 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 406 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 407 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 408 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 409 410 reg = Arm64ManagedRegister::FromCoreRegister(X10); 411 reg_o = Arm64ManagedRegister::FromWRegister(W10); 412 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X10))); 413 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 414 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP))); 415 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W10))); 416 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 417 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 418 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 419 EXPECT_EQ(X10, reg_o.AsOverlappingWRegisterCore()); 420 EXPECT_EQ(W10, reg.AsOverlappingCoreRegisterLow()); 421 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 422 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 423 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 424 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 425 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 426 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 427 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 428 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 429 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 430 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 431 432 reg = Arm64ManagedRegister::FromCoreRegister(IP1); 433 reg_o = Arm64ManagedRegister::FromWRegister(W17); 434 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X17))); 435 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 436 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP))); 437 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W17))); 438 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 439 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 440 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 441 EXPECT_EQ(X17, reg_o.AsOverlappingWRegisterCore()); 442 EXPECT_EQ(W17, reg.AsOverlappingCoreRegisterLow()); 443 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 444 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 445 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 446 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 447 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 448 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 449 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 450 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 451 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 452 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 453 454 reg = Arm64ManagedRegister::FromCoreRegister(XZR); 455 reg_o = Arm64ManagedRegister::FromWRegister(WZR); 456 // TODO: Overlap not implemented, yet 457 // EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31))); 458 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 459 // EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(SP))); 460 // EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 461 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 462 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 463 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W19))); 464 EXPECT_EQ(X31, reg_o.AsOverlappingWRegisterCore()); 465 // TODO: XZR is not a core register right now. 466 // EXPECT_EQ(W31, reg.AsOverlappingCoreRegisterLow()); 467 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 468 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 469 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 470 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 471 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 472 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 473 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 474 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 475 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 476 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 477 478 reg = Arm64ManagedRegister::FromCoreRegister(SP); 479 reg_o = Arm64ManagedRegister::FromWRegister(WZR); 480 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31))); 481 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 482 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15))); 483 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 484 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 485 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 486 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 487 EXPECT_EQ(X31, reg_o.AsOverlappingWRegisterCore()); 488 EXPECT_EQ(W31, reg.AsOverlappingCoreRegisterLow()); 489 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 490 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 491 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 492 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 493 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 494 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 495 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 496 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 497 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 498 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 499 500 reg = Arm64ManagedRegister::FromWRegister(W1); 501 reg_o = Arm64ManagedRegister::FromCoreRegister(X1); 502 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 503 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 504 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15))); 505 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 506 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 507 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 508 EXPECT_EQ(W1, reg_o.AsOverlappingCoreRegisterLow()); 509 EXPECT_EQ(X1, reg.AsOverlappingWRegisterCore()); 510 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 511 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 512 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 513 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 514 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 515 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 516 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 517 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 518 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 519 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 520 521 reg = Arm64ManagedRegister::FromWRegister(W21); 522 reg_o = Arm64ManagedRegister::FromCoreRegister(X21); 523 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W21))); 524 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X21))); 525 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15))); 526 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 527 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 528 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 529 EXPECT_EQ(W21, reg_o.AsOverlappingCoreRegisterLow()); 530 EXPECT_EQ(X21, reg.AsOverlappingWRegisterCore()); 531 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 532 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 533 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 534 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 535 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 536 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 537 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 538 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 539 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 540 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 541 542 543 reg = Arm64ManagedRegister::FromSRegister(S1); 544 reg_o = Arm64ManagedRegister::FromDRegister(D1); 545 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31))); 546 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 547 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15))); 548 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 549 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 550 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 551 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 552 EXPECT_EQ(S1, reg_o.AsOverlappingDRegisterLow()); 553 EXPECT_EQ(D1, reg.AsOverlappingSRegisterD()); 554 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 555 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 556 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 557 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 558 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 559 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 560 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 561 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 562 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2))); 563 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 564 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 565 566 reg = Arm64ManagedRegister::FromSRegister(S15); 567 reg_o = Arm64ManagedRegister::FromDRegister(D15); 568 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31))); 569 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 570 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15))); 571 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 572 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 573 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 574 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 575 EXPECT_EQ(S15, reg_o.AsOverlappingDRegisterLow()); 576 EXPECT_EQ(D15, reg.AsOverlappingSRegisterD()); 577 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 578 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 579 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 580 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S17))); 581 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S16))); 582 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 583 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D16))); 584 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 585 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2))); 586 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D17))); 587 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D20))); 588 589 reg = Arm64ManagedRegister::FromDRegister(D15); 590 reg_o = Arm64ManagedRegister::FromSRegister(S15); 591 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X31))); 592 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X1))); 593 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromCoreRegister(X15))); 594 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 595 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 596 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 597 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W31))); 598 EXPECT_EQ(S15, reg.AsOverlappingDRegisterLow()); 599 EXPECT_EQ(D15, reg_o.AsOverlappingSRegisterD()); 600 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 601 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 602 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 603 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S17))); 604 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S16))); 605 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 606 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D16))); 607 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 608 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2))); 609 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D17))); 610 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D20))); 611} 612 613} // namespace arm64 614} // namespace art 615