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 "managed_register_arm64.h" 18 19 #include "assembler_arm64.h" 20 #include "globals.h" 21 #include "gtest/gtest.h" 22 23 namespace art { 24 namespace arm64 { 25 26 TEST(Arm64ManagedRegister, NoRegister) { 27 Arm64ManagedRegister reg = ManagedRegister::NoRegister().AsArm64(); 28 EXPECT_TRUE(reg.IsNoRegister()); 29 EXPECT_TRUE(!reg.Overlaps(reg)); 30 } 31 32 // X Register test. 33 TEST(Arm64ManagedRegister, XRegister) { 34 Arm64ManagedRegister reg = Arm64ManagedRegister::FromXRegister(X0); 35 Arm64ManagedRegister wreg = Arm64ManagedRegister::FromWRegister(W0); 36 EXPECT_TRUE(!reg.IsNoRegister()); 37 EXPECT_TRUE(reg.IsXRegister()); 38 EXPECT_TRUE(!reg.IsWRegister()); 39 EXPECT_TRUE(!reg.IsDRegister()); 40 EXPECT_TRUE(!reg.IsSRegister()); 41 EXPECT_TRUE(reg.Overlaps(wreg)); 42 EXPECT_EQ(X0, reg.AsXRegister()); 43 44 reg = Arm64ManagedRegister::FromXRegister(X1); 45 wreg = Arm64ManagedRegister::FromWRegister(W1); 46 EXPECT_TRUE(!reg.IsNoRegister()); 47 EXPECT_TRUE(reg.IsXRegister()); 48 EXPECT_TRUE(!reg.IsWRegister()); 49 EXPECT_TRUE(!reg.IsDRegister()); 50 EXPECT_TRUE(!reg.IsSRegister()); 51 EXPECT_TRUE(reg.Overlaps(wreg)); 52 EXPECT_EQ(X1, reg.AsXRegister()); 53 54 reg = Arm64ManagedRegister::FromXRegister(X7); 55 wreg = Arm64ManagedRegister::FromWRegister(W7); 56 EXPECT_TRUE(!reg.IsNoRegister()); 57 EXPECT_TRUE(reg.IsXRegister()); 58 EXPECT_TRUE(!reg.IsWRegister()); 59 EXPECT_TRUE(!reg.IsDRegister()); 60 EXPECT_TRUE(!reg.IsSRegister()); 61 EXPECT_TRUE(reg.Overlaps(wreg)); 62 EXPECT_EQ(X7, reg.AsXRegister()); 63 64 reg = Arm64ManagedRegister::FromXRegister(X15); 65 wreg = Arm64ManagedRegister::FromWRegister(W15); 66 EXPECT_TRUE(!reg.IsNoRegister()); 67 EXPECT_TRUE(reg.IsXRegister()); 68 EXPECT_TRUE(!reg.IsWRegister()); 69 EXPECT_TRUE(!reg.IsDRegister()); 70 EXPECT_TRUE(!reg.IsSRegister()); 71 EXPECT_TRUE(reg.Overlaps(wreg)); 72 EXPECT_EQ(X15, reg.AsXRegister()); 73 74 reg = Arm64ManagedRegister::FromXRegister(X19); 75 wreg = Arm64ManagedRegister::FromWRegister(W19); 76 EXPECT_TRUE(!reg.IsNoRegister()); 77 EXPECT_TRUE(reg.IsXRegister()); 78 EXPECT_TRUE(!reg.IsWRegister()); 79 EXPECT_TRUE(!reg.IsDRegister()); 80 EXPECT_TRUE(!reg.IsSRegister()); 81 EXPECT_TRUE(reg.Overlaps(wreg)); 82 EXPECT_EQ(X19, reg.AsXRegister()); 83 84 reg = Arm64ManagedRegister::FromXRegister(X16); 85 wreg = Arm64ManagedRegister::FromWRegister(W16); 86 EXPECT_TRUE(!reg.IsNoRegister()); 87 EXPECT_TRUE(reg.IsXRegister()); 88 EXPECT_TRUE(!reg.IsWRegister()); 89 EXPECT_TRUE(!reg.IsDRegister()); 90 EXPECT_TRUE(!reg.IsSRegister()); 91 EXPECT_TRUE(reg.Overlaps(wreg)); 92 EXPECT_EQ(IP0, reg.AsXRegister()); 93 94 reg = Arm64ManagedRegister::FromXRegister(SP); 95 wreg = Arm64ManagedRegister::FromWRegister(WZR); 96 EXPECT_TRUE(!reg.IsNoRegister()); 97 EXPECT_TRUE(reg.IsXRegister()); 98 EXPECT_TRUE(!reg.IsWRegister()); 99 EXPECT_TRUE(!reg.IsDRegister()); 100 EXPECT_TRUE(!reg.IsSRegister()); 101 EXPECT_TRUE(!reg.Overlaps(wreg)); 102 EXPECT_EQ(SP, reg.AsXRegister()); 103 } 104 105 // W register test. 106 TEST(Arm64ManagedRegister, WRegister) { 107 Arm64ManagedRegister reg = Arm64ManagedRegister::FromWRegister(W0); 108 Arm64ManagedRegister xreg = Arm64ManagedRegister::FromXRegister(X0); 109 EXPECT_TRUE(!reg.IsNoRegister()); 110 EXPECT_TRUE(!reg.IsXRegister()); 111 EXPECT_TRUE(reg.IsWRegister()); 112 EXPECT_TRUE(!reg.IsDRegister()); 113 EXPECT_TRUE(!reg.IsSRegister()); 114 EXPECT_TRUE(reg.Overlaps(xreg)); 115 EXPECT_EQ(W0, reg.AsWRegister()); 116 117 reg = Arm64ManagedRegister::FromWRegister(W5); 118 xreg = Arm64ManagedRegister::FromXRegister(X5); 119 EXPECT_TRUE(!reg.IsNoRegister()); 120 EXPECT_TRUE(!reg.IsXRegister()); 121 EXPECT_TRUE(reg.IsWRegister()); 122 EXPECT_TRUE(!reg.IsDRegister()); 123 EXPECT_TRUE(!reg.IsSRegister()); 124 EXPECT_TRUE(reg.Overlaps(xreg)); 125 EXPECT_EQ(W5, reg.AsWRegister()); 126 127 reg = Arm64ManagedRegister::FromWRegister(W6); 128 xreg = Arm64ManagedRegister::FromXRegister(X6); 129 EXPECT_TRUE(!reg.IsNoRegister()); 130 EXPECT_TRUE(!reg.IsXRegister()); 131 EXPECT_TRUE(reg.IsWRegister()); 132 EXPECT_TRUE(!reg.IsDRegister()); 133 EXPECT_TRUE(!reg.IsSRegister()); 134 EXPECT_TRUE(reg.Overlaps(xreg)); 135 EXPECT_EQ(W6, reg.AsWRegister()); 136 137 reg = Arm64ManagedRegister::FromWRegister(W18); 138 xreg = Arm64ManagedRegister::FromXRegister(X18); 139 EXPECT_TRUE(!reg.IsNoRegister()); 140 EXPECT_TRUE(!reg.IsXRegister()); 141 EXPECT_TRUE(reg.IsWRegister()); 142 EXPECT_TRUE(!reg.IsDRegister()); 143 EXPECT_TRUE(!reg.IsSRegister()); 144 EXPECT_TRUE(reg.Overlaps(xreg)); 145 EXPECT_EQ(W18, reg.AsWRegister()); 146 147 reg = Arm64ManagedRegister::FromWRegister(W29); 148 xreg = Arm64ManagedRegister::FromXRegister(FP); 149 EXPECT_TRUE(!reg.IsNoRegister()); 150 EXPECT_TRUE(!reg.IsXRegister()); 151 EXPECT_TRUE(reg.IsWRegister()); 152 EXPECT_TRUE(!reg.IsDRegister()); 153 EXPECT_TRUE(!reg.IsSRegister()); 154 EXPECT_TRUE(reg.Overlaps(xreg)); 155 EXPECT_EQ(W29, reg.AsWRegister()); 156 157 reg = Arm64ManagedRegister::FromWRegister(WZR); 158 xreg = Arm64ManagedRegister::FromXRegister(SP); 159 EXPECT_TRUE(!reg.IsNoRegister()); 160 EXPECT_TRUE(!reg.IsXRegister()); 161 EXPECT_TRUE(reg.IsWRegister()); 162 EXPECT_TRUE(!reg.IsDRegister()); 163 EXPECT_TRUE(!reg.IsSRegister()); 164 EXPECT_TRUE(!reg.Overlaps(xreg)); 165 } 166 167 // D Register test. 168 TEST(Arm64ManagedRegister, DRegister) { 169 Arm64ManagedRegister reg = Arm64ManagedRegister::FromDRegister(D0); 170 Arm64ManagedRegister sreg = Arm64ManagedRegister::FromSRegister(S0); 171 EXPECT_TRUE(!reg.IsNoRegister()); 172 EXPECT_TRUE(!reg.IsXRegister()); 173 EXPECT_TRUE(!reg.IsWRegister()); 174 EXPECT_TRUE(reg.IsDRegister()); 175 EXPECT_TRUE(!reg.IsSRegister()); 176 EXPECT_TRUE(reg.Overlaps(sreg)); 177 EXPECT_EQ(D0, reg.AsDRegister()); 178 EXPECT_EQ(S0, reg.AsOverlappingSRegister()); 179 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D0))); 180 181 reg = Arm64ManagedRegister::FromDRegister(D1); 182 sreg = Arm64ManagedRegister::FromSRegister(S1); 183 EXPECT_TRUE(!reg.IsNoRegister()); 184 EXPECT_TRUE(!reg.IsXRegister()); 185 EXPECT_TRUE(!reg.IsWRegister()); 186 EXPECT_TRUE(reg.IsDRegister()); 187 EXPECT_TRUE(!reg.IsSRegister()); 188 EXPECT_TRUE(reg.Overlaps(sreg)); 189 EXPECT_EQ(D1, reg.AsDRegister()); 190 EXPECT_EQ(S1, reg.AsOverlappingSRegister()); 191 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D1))); 192 193 reg = Arm64ManagedRegister::FromDRegister(D20); 194 sreg = Arm64ManagedRegister::FromSRegister(S20); 195 EXPECT_TRUE(!reg.IsNoRegister()); 196 EXPECT_TRUE(!reg.IsXRegister()); 197 EXPECT_TRUE(!reg.IsWRegister()); 198 EXPECT_TRUE(reg.IsDRegister()); 199 EXPECT_TRUE(!reg.IsSRegister()); 200 EXPECT_TRUE(reg.Overlaps(sreg)); 201 EXPECT_EQ(D20, reg.AsDRegister()); 202 EXPECT_EQ(S20, reg.AsOverlappingSRegister()); 203 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D20))); 204 205 reg = Arm64ManagedRegister::FromDRegister(D31); 206 sreg = Arm64ManagedRegister::FromSRegister(S31); 207 EXPECT_TRUE(!reg.IsNoRegister()); 208 EXPECT_TRUE(!reg.IsXRegister()); 209 EXPECT_TRUE(!reg.IsWRegister()); 210 EXPECT_TRUE(reg.IsDRegister()); 211 EXPECT_TRUE(!reg.IsSRegister()); 212 EXPECT_TRUE(reg.Overlaps(sreg)); 213 EXPECT_EQ(D31, reg.AsDRegister()); 214 EXPECT_EQ(S31, reg.AsOverlappingSRegister()); 215 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromDRegister(D31))); 216 } 217 218 // S Register test. 219 TEST(Arm64ManagedRegister, SRegister) { 220 Arm64ManagedRegister reg = Arm64ManagedRegister::FromSRegister(S0); 221 Arm64ManagedRegister dreg = Arm64ManagedRegister::FromDRegister(D0); 222 EXPECT_TRUE(!reg.IsNoRegister()); 223 EXPECT_TRUE(!reg.IsXRegister()); 224 EXPECT_TRUE(!reg.IsWRegister()); 225 EXPECT_TRUE(reg.IsSRegister()); 226 EXPECT_TRUE(!reg.IsDRegister()); 227 EXPECT_TRUE(reg.Overlaps(dreg)); 228 EXPECT_EQ(S0, reg.AsSRegister()); 229 EXPECT_EQ(D0, reg.AsOverlappingDRegister()); 230 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S0))); 231 232 reg = Arm64ManagedRegister::FromSRegister(S5); 233 dreg = Arm64ManagedRegister::FromDRegister(D5); 234 EXPECT_TRUE(!reg.IsNoRegister()); 235 EXPECT_TRUE(!reg.IsXRegister()); 236 EXPECT_TRUE(!reg.IsWRegister()); 237 EXPECT_TRUE(reg.IsSRegister()); 238 EXPECT_TRUE(!reg.IsDRegister()); 239 EXPECT_TRUE(reg.Overlaps(dreg)); 240 EXPECT_EQ(S5, reg.AsSRegister()); 241 EXPECT_EQ(D5, reg.AsOverlappingDRegister()); 242 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S5))); 243 244 reg = Arm64ManagedRegister::FromSRegister(S7); 245 dreg = Arm64ManagedRegister::FromDRegister(D7); 246 EXPECT_TRUE(!reg.IsNoRegister()); 247 EXPECT_TRUE(!reg.IsXRegister()); 248 EXPECT_TRUE(!reg.IsWRegister()); 249 EXPECT_TRUE(reg.IsSRegister()); 250 EXPECT_TRUE(!reg.IsDRegister()); 251 EXPECT_TRUE(reg.Overlaps(dreg)); 252 EXPECT_EQ(S7, reg.AsSRegister()); 253 EXPECT_EQ(D7, reg.AsOverlappingDRegister()); 254 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S7))); 255 256 reg = Arm64ManagedRegister::FromSRegister(S31); 257 dreg = Arm64ManagedRegister::FromDRegister(D31); 258 EXPECT_TRUE(!reg.IsNoRegister()); 259 EXPECT_TRUE(!reg.IsXRegister()); 260 EXPECT_TRUE(!reg.IsWRegister()); 261 EXPECT_TRUE(reg.IsSRegister()); 262 EXPECT_TRUE(!reg.IsDRegister()); 263 EXPECT_TRUE(reg.Overlaps(dreg)); 264 EXPECT_EQ(S31, reg.AsSRegister()); 265 EXPECT_EQ(D31, reg.AsOverlappingDRegister()); 266 EXPECT_TRUE(reg.Equals(Arm64ManagedRegister::FromSRegister(S31))); 267 } 268 269 TEST(Arm64ManagedRegister, Equals) { 270 ManagedRegister no_reg = ManagedRegister::NoRegister(); 271 EXPECT_TRUE(no_reg.Equals(Arm64ManagedRegister::NoRegister())); 272 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromXRegister(X0))); 273 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromXRegister(X1))); 274 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromWRegister(W0))); 275 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromWRegister(W1))); 276 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromDRegister(D0))); 277 EXPECT_TRUE(!no_reg.Equals(Arm64ManagedRegister::FromSRegister(S0))); 278 279 Arm64ManagedRegister reg_X0 = Arm64ManagedRegister::FromXRegister(X0); 280 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::NoRegister())); 281 EXPECT_TRUE(reg_X0.Equals(Arm64ManagedRegister::FromXRegister(X0))); 282 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromXRegister(X1))); 283 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromWRegister(W0))); 284 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 285 EXPECT_TRUE(!reg_X0.Equals(Arm64ManagedRegister::FromDRegister(D0))); 286 287 Arm64ManagedRegister reg_X1 = Arm64ManagedRegister::FromXRegister(X1); 288 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::NoRegister())); 289 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromXRegister(X0))); 290 EXPECT_TRUE(reg_X1.Equals(Arm64ManagedRegister::FromXRegister(X1))); 291 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromWRegister(W1))); 292 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromDRegister(D0))); 293 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromSRegister(S0))); 294 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromDRegister(D1))); 295 EXPECT_TRUE(!reg_X1.Equals(Arm64ManagedRegister::FromSRegister(S1))); 296 297 Arm64ManagedRegister reg_SP = Arm64ManagedRegister::FromXRegister(SP); 298 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::NoRegister())); 299 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromXRegister(XZR))); 300 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromSRegister(S0))); 301 EXPECT_TRUE(!reg_SP.Equals(Arm64ManagedRegister::FromDRegister(D0))); 302 303 Arm64ManagedRegister reg_W8 = Arm64ManagedRegister::FromWRegister(W8); 304 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::NoRegister())); 305 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromXRegister(X0))); 306 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromXRegister(X8))); 307 EXPECT_TRUE(reg_W8.Equals(Arm64ManagedRegister::FromWRegister(W8))); 308 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromDRegister(D0))); 309 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromSRegister(S0))); 310 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromDRegister(D1))); 311 EXPECT_TRUE(!reg_W8.Equals(Arm64ManagedRegister::FromSRegister(S1))); 312 313 Arm64ManagedRegister reg_W12 = Arm64ManagedRegister::FromWRegister(W12); 314 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::NoRegister())); 315 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromXRegister(X0))); 316 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromXRegister(X8))); 317 EXPECT_TRUE(reg_W12.Equals(Arm64ManagedRegister::FromWRegister(W12))); 318 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromDRegister(D0))); 319 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromSRegister(S0))); 320 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromDRegister(D1))); 321 EXPECT_TRUE(!reg_W12.Equals(Arm64ManagedRegister::FromSRegister(S1))); 322 323 Arm64ManagedRegister reg_S0 = Arm64ManagedRegister::FromSRegister(S0); 324 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::NoRegister())); 325 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromXRegister(X0))); 326 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromXRegister(X1))); 327 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromWRegister(W0))); 328 EXPECT_TRUE(reg_S0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 329 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromSRegister(S1))); 330 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromDRegister(D0))); 331 EXPECT_TRUE(!reg_S0.Equals(Arm64ManagedRegister::FromDRegister(D1))); 332 333 Arm64ManagedRegister reg_S1 = Arm64ManagedRegister::FromSRegister(S1); 334 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::NoRegister())); 335 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromXRegister(X0))); 336 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromXRegister(X1))); 337 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromWRegister(W0))); 338 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromSRegister(S0))); 339 EXPECT_TRUE(reg_S1.Equals(Arm64ManagedRegister::FromSRegister(S1))); 340 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromDRegister(D0))); 341 EXPECT_TRUE(!reg_S1.Equals(Arm64ManagedRegister::FromDRegister(D1))); 342 343 Arm64ManagedRegister reg_S31 = Arm64ManagedRegister::FromSRegister(S31); 344 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::NoRegister())); 345 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromXRegister(X0))); 346 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromXRegister(X1))); 347 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromWRegister(W0))); 348 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromSRegister(S0))); 349 EXPECT_TRUE(reg_S31.Equals(Arm64ManagedRegister::FromSRegister(S31))); 350 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromDRegister(D0))); 351 EXPECT_TRUE(!reg_S31.Equals(Arm64ManagedRegister::FromDRegister(D1))); 352 353 Arm64ManagedRegister reg_D0 = Arm64ManagedRegister::FromDRegister(D0); 354 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::NoRegister())); 355 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromXRegister(X0))); 356 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromWRegister(W1))); 357 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 358 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S0))); 359 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromSRegister(S31))); 360 EXPECT_TRUE(reg_D0.Equals(Arm64ManagedRegister::FromDRegister(D0))); 361 EXPECT_TRUE(!reg_D0.Equals(Arm64ManagedRegister::FromDRegister(D1))); 362 363 Arm64ManagedRegister reg_D15 = Arm64ManagedRegister::FromDRegister(D15); 364 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::NoRegister())); 365 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromXRegister(X0))); 366 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromXRegister(X1))); 367 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromWRegister(W0))); 368 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromSRegister(S0))); 369 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromSRegister(S31))); 370 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D0))); 371 EXPECT_TRUE(!reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D1))); 372 EXPECT_TRUE(reg_D15.Equals(Arm64ManagedRegister::FromDRegister(D15))); 373 } 374 375 TEST(Arm64ManagedRegister, Overlaps) { 376 Arm64ManagedRegister reg = Arm64ManagedRegister::FromXRegister(X0); 377 Arm64ManagedRegister reg_o = Arm64ManagedRegister::FromWRegister(W0); 378 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromXRegister(X0))); 379 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 380 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(SP))); 381 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W0))); 382 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 383 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 384 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 385 EXPECT_EQ(X0, reg_o.AsOverlappingXRegister()); 386 EXPECT_EQ(W0, reg.AsOverlappingWRegister()); 387 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 388 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 389 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 390 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 391 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 392 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 393 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 394 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 395 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 396 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 397 398 reg = Arm64ManagedRegister::FromXRegister(X10); 399 reg_o = Arm64ManagedRegister::FromWRegister(W10); 400 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromXRegister(X10))); 401 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 402 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(SP))); 403 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W10))); 404 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 405 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 406 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 407 EXPECT_EQ(X10, reg_o.AsOverlappingXRegister()); 408 EXPECT_EQ(W10, reg.AsOverlappingWRegister()); 409 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 410 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 411 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 412 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 413 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 414 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 415 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 416 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 417 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 418 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 419 420 reg = Arm64ManagedRegister::FromXRegister(IP1); 421 reg_o = Arm64ManagedRegister::FromWRegister(W17); 422 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromXRegister(X17))); 423 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 424 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(SP))); 425 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W17))); 426 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 427 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 428 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 429 EXPECT_EQ(X17, reg_o.AsOverlappingXRegister()); 430 EXPECT_EQ(W17, reg.AsOverlappingWRegister()); 431 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 432 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 433 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 434 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 435 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 436 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 437 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 438 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 439 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 440 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 441 442 reg = Arm64ManagedRegister::FromXRegister(XZR); 443 reg_o = Arm64ManagedRegister::FromWRegister(WZR); 444 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 445 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(SP))); 446 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 447 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 448 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W19))); 449 EXPECT_NE(SP, reg_o.AsOverlappingXRegister()); 450 EXPECT_EQ(XZR, reg_o.AsOverlappingXRegister()); 451 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 452 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 453 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 454 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 455 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 456 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 457 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 458 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 459 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 460 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 461 462 reg = Arm64ManagedRegister::FromXRegister(SP); 463 reg_o = Arm64ManagedRegister::FromWRegister(WZR); 464 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 465 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X15))); 466 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 467 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 468 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 469 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 470 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 471 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 472 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 473 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 474 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 475 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 476 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 477 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 478 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 479 480 reg = Arm64ManagedRegister::FromWRegister(W1); 481 reg_o = Arm64ManagedRegister::FromXRegister(X1); 482 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 483 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 484 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X15))); 485 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 486 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 487 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W30))); 488 EXPECT_EQ(W1, reg_o.AsOverlappingWRegister()); 489 EXPECT_EQ(X1, reg.AsOverlappingXRegister()); 490 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 491 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 492 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 493 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 494 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 495 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 496 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 497 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 498 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 499 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 500 501 reg = Arm64ManagedRegister::FromWRegister(W21); 502 reg_o = Arm64ManagedRegister::FromXRegister(X21); 503 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromWRegister(W21))); 504 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromXRegister(X21))); 505 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X15))); 506 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 507 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 508 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W30))); 509 EXPECT_EQ(W21, reg_o.AsOverlappingWRegister()); 510 EXPECT_EQ(X21, reg.AsOverlappingXRegister()); 511 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 512 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 513 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 514 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 515 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 516 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 517 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 518 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 519 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 520 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 521 522 523 reg = Arm64ManagedRegister::FromSRegister(S1); 524 reg_o = Arm64ManagedRegister::FromDRegister(D1); 525 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X30))); 526 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 527 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X15))); 528 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 529 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 530 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 531 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W30))); 532 EXPECT_EQ(S1, reg_o.AsOverlappingSRegister()); 533 EXPECT_EQ(D1, reg.AsOverlappingDRegister()); 534 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 535 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S1))); 536 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 537 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 538 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S30))); 539 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 540 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D0))); 541 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D1))); 542 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2))); 543 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D7))); 544 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 545 546 reg = Arm64ManagedRegister::FromSRegister(S15); 547 reg_o = Arm64ManagedRegister::FromDRegister(D15); 548 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X30))); 549 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 550 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X15))); 551 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 552 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 553 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 554 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W30))); 555 EXPECT_EQ(S15, reg_o.AsOverlappingSRegister()); 556 EXPECT_EQ(D15, reg.AsOverlappingDRegister()); 557 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 558 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 559 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 560 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S17))); 561 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S16))); 562 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 563 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D16))); 564 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 565 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2))); 566 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D17))); 567 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D20))); 568 569 reg = Arm64ManagedRegister::FromDRegister(D15); 570 reg_o = Arm64ManagedRegister::FromSRegister(S15); 571 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X30))); 572 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X1))); 573 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromXRegister(X15))); 574 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(WZR))); 575 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W1))); 576 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W12))); 577 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromWRegister(W30))); 578 EXPECT_EQ(S15, reg.AsOverlappingSRegister()); 579 EXPECT_EQ(D15, reg_o.AsOverlappingDRegister()); 580 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S0))); 581 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromSRegister(S15))); 582 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S2))); 583 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S17))); 584 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S16))); 585 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromSRegister(S31))); 586 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D16))); 587 EXPECT_TRUE(reg.Overlaps(Arm64ManagedRegister::FromDRegister(D15))); 588 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D2))); 589 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D17))); 590 EXPECT_TRUE(!reg.Overlaps(Arm64ManagedRegister::FromDRegister(D20))); 591 } 592 593 TEST(Arm64ManagedRegister, VixlRegisters) { 594 // X Registers. 595 EXPECT_TRUE(vixl::aarch64::x0.Is(Arm64Assembler::reg_x(X0))); 596 EXPECT_TRUE(vixl::aarch64::x1.Is(Arm64Assembler::reg_x(X1))); 597 EXPECT_TRUE(vixl::aarch64::x2.Is(Arm64Assembler::reg_x(X2))); 598 EXPECT_TRUE(vixl::aarch64::x3.Is(Arm64Assembler::reg_x(X3))); 599 EXPECT_TRUE(vixl::aarch64::x4.Is(Arm64Assembler::reg_x(X4))); 600 EXPECT_TRUE(vixl::aarch64::x5.Is(Arm64Assembler::reg_x(X5))); 601 EXPECT_TRUE(vixl::aarch64::x6.Is(Arm64Assembler::reg_x(X6))); 602 EXPECT_TRUE(vixl::aarch64::x7.Is(Arm64Assembler::reg_x(X7))); 603 EXPECT_TRUE(vixl::aarch64::x8.Is(Arm64Assembler::reg_x(X8))); 604 EXPECT_TRUE(vixl::aarch64::x9.Is(Arm64Assembler::reg_x(X9))); 605 EXPECT_TRUE(vixl::aarch64::x10.Is(Arm64Assembler::reg_x(X10))); 606 EXPECT_TRUE(vixl::aarch64::x11.Is(Arm64Assembler::reg_x(X11))); 607 EXPECT_TRUE(vixl::aarch64::x12.Is(Arm64Assembler::reg_x(X12))); 608 EXPECT_TRUE(vixl::aarch64::x13.Is(Arm64Assembler::reg_x(X13))); 609 EXPECT_TRUE(vixl::aarch64::x14.Is(Arm64Assembler::reg_x(X14))); 610 EXPECT_TRUE(vixl::aarch64::x15.Is(Arm64Assembler::reg_x(X15))); 611 EXPECT_TRUE(vixl::aarch64::x16.Is(Arm64Assembler::reg_x(X16))); 612 EXPECT_TRUE(vixl::aarch64::x17.Is(Arm64Assembler::reg_x(X17))); 613 EXPECT_TRUE(vixl::aarch64::x18.Is(Arm64Assembler::reg_x(X18))); 614 EXPECT_TRUE(vixl::aarch64::x19.Is(Arm64Assembler::reg_x(X19))); 615 EXPECT_TRUE(vixl::aarch64::x20.Is(Arm64Assembler::reg_x(X20))); 616 EXPECT_TRUE(vixl::aarch64::x21.Is(Arm64Assembler::reg_x(X21))); 617 EXPECT_TRUE(vixl::aarch64::x22.Is(Arm64Assembler::reg_x(X22))); 618 EXPECT_TRUE(vixl::aarch64::x23.Is(Arm64Assembler::reg_x(X23))); 619 EXPECT_TRUE(vixl::aarch64::x24.Is(Arm64Assembler::reg_x(X24))); 620 EXPECT_TRUE(vixl::aarch64::x25.Is(Arm64Assembler::reg_x(X25))); 621 EXPECT_TRUE(vixl::aarch64::x26.Is(Arm64Assembler::reg_x(X26))); 622 EXPECT_TRUE(vixl::aarch64::x27.Is(Arm64Assembler::reg_x(X27))); 623 EXPECT_TRUE(vixl::aarch64::x28.Is(Arm64Assembler::reg_x(X28))); 624 EXPECT_TRUE(vixl::aarch64::x29.Is(Arm64Assembler::reg_x(X29))); 625 EXPECT_TRUE(vixl::aarch64::x30.Is(Arm64Assembler::reg_x(X30))); 626 627 EXPECT_TRUE(vixl::aarch64::x19.Is(Arm64Assembler::reg_x(TR))); 628 EXPECT_TRUE(vixl::aarch64::ip0.Is(Arm64Assembler::reg_x(IP0))); 629 EXPECT_TRUE(vixl::aarch64::ip1.Is(Arm64Assembler::reg_x(IP1))); 630 EXPECT_TRUE(vixl::aarch64::x29.Is(Arm64Assembler::reg_x(FP))); 631 EXPECT_TRUE(vixl::aarch64::lr.Is(Arm64Assembler::reg_x(LR))); 632 EXPECT_TRUE(vixl::aarch64::sp.Is(Arm64Assembler::reg_x(SP))); 633 EXPECT_TRUE(vixl::aarch64::xzr.Is(Arm64Assembler::reg_x(XZR))); 634 635 // W Registers. 636 EXPECT_TRUE(vixl::aarch64::w0.Is(Arm64Assembler::reg_w(W0))); 637 EXPECT_TRUE(vixl::aarch64::w1.Is(Arm64Assembler::reg_w(W1))); 638 EXPECT_TRUE(vixl::aarch64::w2.Is(Arm64Assembler::reg_w(W2))); 639 EXPECT_TRUE(vixl::aarch64::w3.Is(Arm64Assembler::reg_w(W3))); 640 EXPECT_TRUE(vixl::aarch64::w4.Is(Arm64Assembler::reg_w(W4))); 641 EXPECT_TRUE(vixl::aarch64::w5.Is(Arm64Assembler::reg_w(W5))); 642 EXPECT_TRUE(vixl::aarch64::w6.Is(Arm64Assembler::reg_w(W6))); 643 EXPECT_TRUE(vixl::aarch64::w7.Is(Arm64Assembler::reg_w(W7))); 644 EXPECT_TRUE(vixl::aarch64::w8.Is(Arm64Assembler::reg_w(W8))); 645 EXPECT_TRUE(vixl::aarch64::w9.Is(Arm64Assembler::reg_w(W9))); 646 EXPECT_TRUE(vixl::aarch64::w10.Is(Arm64Assembler::reg_w(W10))); 647 EXPECT_TRUE(vixl::aarch64::w11.Is(Arm64Assembler::reg_w(W11))); 648 EXPECT_TRUE(vixl::aarch64::w12.Is(Arm64Assembler::reg_w(W12))); 649 EXPECT_TRUE(vixl::aarch64::w13.Is(Arm64Assembler::reg_w(W13))); 650 EXPECT_TRUE(vixl::aarch64::w14.Is(Arm64Assembler::reg_w(W14))); 651 EXPECT_TRUE(vixl::aarch64::w15.Is(Arm64Assembler::reg_w(W15))); 652 EXPECT_TRUE(vixl::aarch64::w16.Is(Arm64Assembler::reg_w(W16))); 653 EXPECT_TRUE(vixl::aarch64::w17.Is(Arm64Assembler::reg_w(W17))); 654 EXPECT_TRUE(vixl::aarch64::w18.Is(Arm64Assembler::reg_w(W18))); 655 EXPECT_TRUE(vixl::aarch64::w19.Is(Arm64Assembler::reg_w(W19))); 656 EXPECT_TRUE(vixl::aarch64::w20.Is(Arm64Assembler::reg_w(W20))); 657 EXPECT_TRUE(vixl::aarch64::w21.Is(Arm64Assembler::reg_w(W21))); 658 EXPECT_TRUE(vixl::aarch64::w22.Is(Arm64Assembler::reg_w(W22))); 659 EXPECT_TRUE(vixl::aarch64::w23.Is(Arm64Assembler::reg_w(W23))); 660 EXPECT_TRUE(vixl::aarch64::w24.Is(Arm64Assembler::reg_w(W24))); 661 EXPECT_TRUE(vixl::aarch64::w25.Is(Arm64Assembler::reg_w(W25))); 662 EXPECT_TRUE(vixl::aarch64::w26.Is(Arm64Assembler::reg_w(W26))); 663 EXPECT_TRUE(vixl::aarch64::w27.Is(Arm64Assembler::reg_w(W27))); 664 EXPECT_TRUE(vixl::aarch64::w28.Is(Arm64Assembler::reg_w(W28))); 665 EXPECT_TRUE(vixl::aarch64::w29.Is(Arm64Assembler::reg_w(W29))); 666 EXPECT_TRUE(vixl::aarch64::w30.Is(Arm64Assembler::reg_w(W30))); 667 EXPECT_TRUE(vixl::aarch64::w31.Is(Arm64Assembler::reg_w(WZR))); 668 EXPECT_TRUE(vixl::aarch64::wzr.Is(Arm64Assembler::reg_w(WZR))); 669 EXPECT_TRUE(vixl::aarch64::wsp.Is(Arm64Assembler::reg_w(WSP))); 670 671 // D Registers. 672 EXPECT_TRUE(vixl::aarch64::d0.Is(Arm64Assembler::reg_d(D0))); 673 EXPECT_TRUE(vixl::aarch64::d1.Is(Arm64Assembler::reg_d(D1))); 674 EXPECT_TRUE(vixl::aarch64::d2.Is(Arm64Assembler::reg_d(D2))); 675 EXPECT_TRUE(vixl::aarch64::d3.Is(Arm64Assembler::reg_d(D3))); 676 EXPECT_TRUE(vixl::aarch64::d4.Is(Arm64Assembler::reg_d(D4))); 677 EXPECT_TRUE(vixl::aarch64::d5.Is(Arm64Assembler::reg_d(D5))); 678 EXPECT_TRUE(vixl::aarch64::d6.Is(Arm64Assembler::reg_d(D6))); 679 EXPECT_TRUE(vixl::aarch64::d7.Is(Arm64Assembler::reg_d(D7))); 680 EXPECT_TRUE(vixl::aarch64::d8.Is(Arm64Assembler::reg_d(D8))); 681 EXPECT_TRUE(vixl::aarch64::d9.Is(Arm64Assembler::reg_d(D9))); 682 EXPECT_TRUE(vixl::aarch64::d10.Is(Arm64Assembler::reg_d(D10))); 683 EXPECT_TRUE(vixl::aarch64::d11.Is(Arm64Assembler::reg_d(D11))); 684 EXPECT_TRUE(vixl::aarch64::d12.Is(Arm64Assembler::reg_d(D12))); 685 EXPECT_TRUE(vixl::aarch64::d13.Is(Arm64Assembler::reg_d(D13))); 686 EXPECT_TRUE(vixl::aarch64::d14.Is(Arm64Assembler::reg_d(D14))); 687 EXPECT_TRUE(vixl::aarch64::d15.Is(Arm64Assembler::reg_d(D15))); 688 EXPECT_TRUE(vixl::aarch64::d16.Is(Arm64Assembler::reg_d(D16))); 689 EXPECT_TRUE(vixl::aarch64::d17.Is(Arm64Assembler::reg_d(D17))); 690 EXPECT_TRUE(vixl::aarch64::d18.Is(Arm64Assembler::reg_d(D18))); 691 EXPECT_TRUE(vixl::aarch64::d19.Is(Arm64Assembler::reg_d(D19))); 692 EXPECT_TRUE(vixl::aarch64::d20.Is(Arm64Assembler::reg_d(D20))); 693 EXPECT_TRUE(vixl::aarch64::d21.Is(Arm64Assembler::reg_d(D21))); 694 EXPECT_TRUE(vixl::aarch64::d22.Is(Arm64Assembler::reg_d(D22))); 695 EXPECT_TRUE(vixl::aarch64::d23.Is(Arm64Assembler::reg_d(D23))); 696 EXPECT_TRUE(vixl::aarch64::d24.Is(Arm64Assembler::reg_d(D24))); 697 EXPECT_TRUE(vixl::aarch64::d25.Is(Arm64Assembler::reg_d(D25))); 698 EXPECT_TRUE(vixl::aarch64::d26.Is(Arm64Assembler::reg_d(D26))); 699 EXPECT_TRUE(vixl::aarch64::d27.Is(Arm64Assembler::reg_d(D27))); 700 EXPECT_TRUE(vixl::aarch64::d28.Is(Arm64Assembler::reg_d(D28))); 701 EXPECT_TRUE(vixl::aarch64::d29.Is(Arm64Assembler::reg_d(D29))); 702 EXPECT_TRUE(vixl::aarch64::d30.Is(Arm64Assembler::reg_d(D30))); 703 EXPECT_TRUE(vixl::aarch64::d31.Is(Arm64Assembler::reg_d(D31))); 704 705 // S Registers. 706 EXPECT_TRUE(vixl::aarch64::s0.Is(Arm64Assembler::reg_s(S0))); 707 EXPECT_TRUE(vixl::aarch64::s1.Is(Arm64Assembler::reg_s(S1))); 708 EXPECT_TRUE(vixl::aarch64::s2.Is(Arm64Assembler::reg_s(S2))); 709 EXPECT_TRUE(vixl::aarch64::s3.Is(Arm64Assembler::reg_s(S3))); 710 EXPECT_TRUE(vixl::aarch64::s4.Is(Arm64Assembler::reg_s(S4))); 711 EXPECT_TRUE(vixl::aarch64::s5.Is(Arm64Assembler::reg_s(S5))); 712 EXPECT_TRUE(vixl::aarch64::s6.Is(Arm64Assembler::reg_s(S6))); 713 EXPECT_TRUE(vixl::aarch64::s7.Is(Arm64Assembler::reg_s(S7))); 714 EXPECT_TRUE(vixl::aarch64::s8.Is(Arm64Assembler::reg_s(S8))); 715 EXPECT_TRUE(vixl::aarch64::s9.Is(Arm64Assembler::reg_s(S9))); 716 EXPECT_TRUE(vixl::aarch64::s10.Is(Arm64Assembler::reg_s(S10))); 717 EXPECT_TRUE(vixl::aarch64::s11.Is(Arm64Assembler::reg_s(S11))); 718 EXPECT_TRUE(vixl::aarch64::s12.Is(Arm64Assembler::reg_s(S12))); 719 EXPECT_TRUE(vixl::aarch64::s13.Is(Arm64Assembler::reg_s(S13))); 720 EXPECT_TRUE(vixl::aarch64::s14.Is(Arm64Assembler::reg_s(S14))); 721 EXPECT_TRUE(vixl::aarch64::s15.Is(Arm64Assembler::reg_s(S15))); 722 EXPECT_TRUE(vixl::aarch64::s16.Is(Arm64Assembler::reg_s(S16))); 723 EXPECT_TRUE(vixl::aarch64::s17.Is(Arm64Assembler::reg_s(S17))); 724 EXPECT_TRUE(vixl::aarch64::s18.Is(Arm64Assembler::reg_s(S18))); 725 EXPECT_TRUE(vixl::aarch64::s19.Is(Arm64Assembler::reg_s(S19))); 726 EXPECT_TRUE(vixl::aarch64::s20.Is(Arm64Assembler::reg_s(S20))); 727 EXPECT_TRUE(vixl::aarch64::s21.Is(Arm64Assembler::reg_s(S21))); 728 EXPECT_TRUE(vixl::aarch64::s22.Is(Arm64Assembler::reg_s(S22))); 729 EXPECT_TRUE(vixl::aarch64::s23.Is(Arm64Assembler::reg_s(S23))); 730 EXPECT_TRUE(vixl::aarch64::s24.Is(Arm64Assembler::reg_s(S24))); 731 EXPECT_TRUE(vixl::aarch64::s25.Is(Arm64Assembler::reg_s(S25))); 732 EXPECT_TRUE(vixl::aarch64::s26.Is(Arm64Assembler::reg_s(S26))); 733 EXPECT_TRUE(vixl::aarch64::s27.Is(Arm64Assembler::reg_s(S27))); 734 EXPECT_TRUE(vixl::aarch64::s28.Is(Arm64Assembler::reg_s(S28))); 735 EXPECT_TRUE(vixl::aarch64::s29.Is(Arm64Assembler::reg_s(S29))); 736 EXPECT_TRUE(vixl::aarch64::s30.Is(Arm64Assembler::reg_s(S30))); 737 EXPECT_TRUE(vixl::aarch64::s31.Is(Arm64Assembler::reg_s(S31))); 738 } 739 740 } // namespace arm64 741 } // namespace art 742