Home | History | Annotate | Download | only in x86_64
      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_x86_64.h"
     18 #include "base/globals.h"
     19 #include "gtest/gtest.h"
     20 
     21 namespace art {
     22 namespace x86_64 {
     23 
     24 TEST(X86_64ManagedRegister, NoRegister) {
     25   X86_64ManagedRegister reg = ManagedRegister::NoRegister().AsX86();
     26   EXPECT_TRUE(reg.IsNoRegister());
     27   EXPECT_TRUE(!reg.Overlaps(reg));
     28 }
     29 
     30 TEST(X86_64ManagedRegister, CpuRegister) {
     31   X86_64ManagedRegister reg = X86_64ManagedRegister::FromCpuRegister(RAX);
     32   EXPECT_TRUE(!reg.IsNoRegister());
     33   EXPECT_TRUE(reg.IsCpuRegister());
     34   EXPECT_TRUE(!reg.IsXmmRegister());
     35   EXPECT_TRUE(!reg.IsX87Register());
     36   EXPECT_TRUE(!reg.IsRegisterPair());
     37   EXPECT_EQ(RAX, reg.AsCpuRegister());
     38 
     39   reg = X86_64ManagedRegister::FromCpuRegister(RBX);
     40   EXPECT_TRUE(!reg.IsNoRegister());
     41   EXPECT_TRUE(reg.IsCpuRegister());
     42   EXPECT_TRUE(!reg.IsXmmRegister());
     43   EXPECT_TRUE(!reg.IsX87Register());
     44   EXPECT_TRUE(!reg.IsRegisterPair());
     45   EXPECT_EQ(RBX, reg.AsCpuRegister());
     46 
     47   reg = X86_64ManagedRegister::FromCpuRegister(RCX);
     48   EXPECT_TRUE(!reg.IsNoRegister());
     49   EXPECT_TRUE(reg.IsCpuRegister());
     50   EXPECT_TRUE(!reg.IsXmmRegister());
     51   EXPECT_TRUE(!reg.IsX87Register());
     52   EXPECT_TRUE(!reg.IsRegisterPair());
     53   EXPECT_EQ(RCX, reg.AsCpuRegister());
     54 
     55   reg = X86_64ManagedRegister::FromCpuRegister(RDI);
     56   EXPECT_TRUE(!reg.IsNoRegister());
     57   EXPECT_TRUE(reg.IsCpuRegister());
     58   EXPECT_TRUE(!reg.IsXmmRegister());
     59   EXPECT_TRUE(!reg.IsX87Register());
     60   EXPECT_TRUE(!reg.IsRegisterPair());
     61   EXPECT_EQ(RDI, reg.AsCpuRegister());
     62 }
     63 
     64 TEST(X86_64ManagedRegister, XmmRegister) {
     65   X86_64ManagedRegister reg = X86_64ManagedRegister::FromXmmRegister(XMM0);
     66   EXPECT_TRUE(!reg.IsNoRegister());
     67   EXPECT_TRUE(!reg.IsCpuRegister());
     68   EXPECT_TRUE(reg.IsXmmRegister());
     69   EXPECT_TRUE(!reg.IsX87Register());
     70   EXPECT_TRUE(!reg.IsRegisterPair());
     71   EXPECT_EQ(XMM0, reg.AsXmmRegister());
     72 
     73   reg = X86_64ManagedRegister::FromXmmRegister(XMM1);
     74   EXPECT_TRUE(!reg.IsNoRegister());
     75   EXPECT_TRUE(!reg.IsCpuRegister());
     76   EXPECT_TRUE(reg.IsXmmRegister());
     77   EXPECT_TRUE(!reg.IsX87Register());
     78   EXPECT_TRUE(!reg.IsRegisterPair());
     79   EXPECT_EQ(XMM1, reg.AsXmmRegister());
     80 
     81   reg = X86_64ManagedRegister::FromXmmRegister(XMM7);
     82   EXPECT_TRUE(!reg.IsNoRegister());
     83   EXPECT_TRUE(!reg.IsCpuRegister());
     84   EXPECT_TRUE(reg.IsXmmRegister());
     85   EXPECT_TRUE(!reg.IsX87Register());
     86   EXPECT_TRUE(!reg.IsRegisterPair());
     87   EXPECT_EQ(XMM7, reg.AsXmmRegister());
     88 }
     89 
     90 TEST(X86_64ManagedRegister, X87Register) {
     91   X86_64ManagedRegister reg = X86_64ManagedRegister::FromX87Register(ST0);
     92   EXPECT_TRUE(!reg.IsNoRegister());
     93   EXPECT_TRUE(!reg.IsCpuRegister());
     94   EXPECT_TRUE(!reg.IsXmmRegister());
     95   EXPECT_TRUE(reg.IsX87Register());
     96   EXPECT_TRUE(!reg.IsRegisterPair());
     97   EXPECT_EQ(ST0, reg.AsX87Register());
     98 
     99   reg = X86_64ManagedRegister::FromX87Register(ST1);
    100   EXPECT_TRUE(!reg.IsNoRegister());
    101   EXPECT_TRUE(!reg.IsCpuRegister());
    102   EXPECT_TRUE(!reg.IsXmmRegister());
    103   EXPECT_TRUE(reg.IsX87Register());
    104   EXPECT_TRUE(!reg.IsRegisterPair());
    105   EXPECT_EQ(ST1, reg.AsX87Register());
    106 
    107   reg = X86_64ManagedRegister::FromX87Register(ST7);
    108   EXPECT_TRUE(!reg.IsNoRegister());
    109   EXPECT_TRUE(!reg.IsCpuRegister());
    110   EXPECT_TRUE(!reg.IsXmmRegister());
    111   EXPECT_TRUE(reg.IsX87Register());
    112   EXPECT_TRUE(!reg.IsRegisterPair());
    113   EXPECT_EQ(ST7, reg.AsX87Register());
    114 }
    115 
    116 TEST(X86_64ManagedRegister, RegisterPair) {
    117   X86_64ManagedRegister reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDX);
    118   EXPECT_TRUE(!reg.IsNoRegister());
    119   EXPECT_TRUE(!reg.IsCpuRegister());
    120   EXPECT_TRUE(!reg.IsXmmRegister());
    121   EXPECT_TRUE(!reg.IsX87Register());
    122   EXPECT_TRUE(reg.IsRegisterPair());
    123   EXPECT_EQ(RAX, reg.AsRegisterPairLow());
    124   EXPECT_EQ(RDX, reg.AsRegisterPairHigh());
    125 
    126   reg = X86_64ManagedRegister::FromRegisterPair(EAX_ECX);
    127   EXPECT_TRUE(!reg.IsNoRegister());
    128   EXPECT_TRUE(!reg.IsCpuRegister());
    129   EXPECT_TRUE(!reg.IsXmmRegister());
    130   EXPECT_TRUE(!reg.IsX87Register());
    131   EXPECT_TRUE(reg.IsRegisterPair());
    132   EXPECT_EQ(RAX, reg.AsRegisterPairLow());
    133   EXPECT_EQ(RCX, reg.AsRegisterPairHigh());
    134 
    135   reg = X86_64ManagedRegister::FromRegisterPair(EAX_EBX);
    136   EXPECT_TRUE(!reg.IsNoRegister());
    137   EXPECT_TRUE(!reg.IsCpuRegister());
    138   EXPECT_TRUE(!reg.IsXmmRegister());
    139   EXPECT_TRUE(!reg.IsX87Register());
    140   EXPECT_TRUE(reg.IsRegisterPair());
    141   EXPECT_EQ(RAX, reg.AsRegisterPairLow());
    142   EXPECT_EQ(RBX, reg.AsRegisterPairHigh());
    143 
    144   reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDI);
    145   EXPECT_TRUE(!reg.IsNoRegister());
    146   EXPECT_TRUE(!reg.IsCpuRegister());
    147   EXPECT_TRUE(!reg.IsXmmRegister());
    148   EXPECT_TRUE(!reg.IsX87Register());
    149   EXPECT_TRUE(reg.IsRegisterPair());
    150   EXPECT_EQ(RAX, reg.AsRegisterPairLow());
    151   EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
    152 
    153   reg = X86_64ManagedRegister::FromRegisterPair(EDX_ECX);
    154   EXPECT_TRUE(!reg.IsNoRegister());
    155   EXPECT_TRUE(!reg.IsCpuRegister());
    156   EXPECT_TRUE(!reg.IsXmmRegister());
    157   EXPECT_TRUE(!reg.IsX87Register());
    158   EXPECT_TRUE(reg.IsRegisterPair());
    159   EXPECT_EQ(RDX, reg.AsRegisterPairLow());
    160   EXPECT_EQ(RCX, reg.AsRegisterPairHigh());
    161 
    162   reg = X86_64ManagedRegister::FromRegisterPair(EDX_EBX);
    163   EXPECT_TRUE(!reg.IsNoRegister());
    164   EXPECT_TRUE(!reg.IsCpuRegister());
    165   EXPECT_TRUE(!reg.IsXmmRegister());
    166   EXPECT_TRUE(!reg.IsX87Register());
    167   EXPECT_TRUE(reg.IsRegisterPair());
    168   EXPECT_EQ(RDX, reg.AsRegisterPairLow());
    169   EXPECT_EQ(RBX, reg.AsRegisterPairHigh());
    170 
    171   reg = X86_64ManagedRegister::FromRegisterPair(EDX_EDI);
    172   EXPECT_TRUE(!reg.IsNoRegister());
    173   EXPECT_TRUE(!reg.IsCpuRegister());
    174   EXPECT_TRUE(!reg.IsXmmRegister());
    175   EXPECT_TRUE(!reg.IsX87Register());
    176   EXPECT_TRUE(reg.IsRegisterPair());
    177   EXPECT_EQ(RDX, reg.AsRegisterPairLow());
    178   EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
    179 
    180   reg = X86_64ManagedRegister::FromRegisterPair(ECX_EBX);
    181   EXPECT_TRUE(!reg.IsNoRegister());
    182   EXPECT_TRUE(!reg.IsCpuRegister());
    183   EXPECT_TRUE(!reg.IsXmmRegister());
    184   EXPECT_TRUE(!reg.IsX87Register());
    185   EXPECT_TRUE(reg.IsRegisterPair());
    186   EXPECT_EQ(RCX, reg.AsRegisterPairLow());
    187   EXPECT_EQ(RBX, reg.AsRegisterPairHigh());
    188 
    189   reg = X86_64ManagedRegister::FromRegisterPair(ECX_EDI);
    190   EXPECT_TRUE(!reg.IsNoRegister());
    191   EXPECT_TRUE(!reg.IsCpuRegister());
    192   EXPECT_TRUE(!reg.IsXmmRegister());
    193   EXPECT_TRUE(!reg.IsX87Register());
    194   EXPECT_TRUE(reg.IsRegisterPair());
    195   EXPECT_EQ(RCX, reg.AsRegisterPairLow());
    196   EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
    197 
    198   reg = X86_64ManagedRegister::FromRegisterPair(EBX_EDI);
    199   EXPECT_TRUE(!reg.IsNoRegister());
    200   EXPECT_TRUE(!reg.IsCpuRegister());
    201   EXPECT_TRUE(!reg.IsXmmRegister());
    202   EXPECT_TRUE(!reg.IsX87Register());
    203   EXPECT_TRUE(reg.IsRegisterPair());
    204   EXPECT_EQ(RBX, reg.AsRegisterPairLow());
    205   EXPECT_EQ(RDI, reg.AsRegisterPairHigh());
    206 }
    207 
    208 TEST(X86_64ManagedRegister, Equals) {
    209   X86_64ManagedRegister reg_eax = X86_64ManagedRegister::FromCpuRegister(RAX);
    210   EXPECT_TRUE(reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
    211   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
    212   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
    213   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    214   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    215   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
    216   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
    217   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    218   EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    219 
    220   X86_64ManagedRegister reg_xmm0 = X86_64ManagedRegister::FromXmmRegister(XMM0);
    221   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
    222   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
    223   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
    224   EXPECT_TRUE(reg_xmm0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    225   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    226   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
    227   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
    228   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    229   EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    230 
    231   X86_64ManagedRegister reg_st0 = X86_64ManagedRegister::FromX87Register(ST0);
    232   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
    233   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
    234   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
    235   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    236   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    237   EXPECT_TRUE(reg_st0.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
    238   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
    239   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    240   EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    241 
    242   X86_64ManagedRegister reg_pair = X86_64ManagedRegister::FromRegisterPair(EAX_EDX);
    243   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RAX)));
    244   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RBX)));
    245   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RDI)));
    246   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    247   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    248   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromX87Register(ST0)));
    249   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromX87Register(ST7)));
    250   EXPECT_TRUE(reg_pair.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    251   EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    252 }
    253 
    254 TEST(X86_64ManagedRegister, Overlaps) {
    255   X86_64ManagedRegister reg = X86_64ManagedRegister::FromCpuRegister(RAX);
    256   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    257   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    258   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    259   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    260   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    261   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    262   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    263   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    264   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    265 
    266   reg = X86_64ManagedRegister::FromCpuRegister(RDX);
    267   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    268   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    269   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    270   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    271   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    272   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    273   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    274   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    275   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    276 
    277   reg = X86_64ManagedRegister::FromCpuRegister(RDI);
    278   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    279   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    280   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    281   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    282   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    283   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    284   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    285   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    286   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    287 
    288   reg = X86_64ManagedRegister::FromCpuRegister(RBX);
    289   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    290   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    291   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    292   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    293   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    294   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    295   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    296   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    297   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    298 
    299   reg = X86_64ManagedRegister::FromXmmRegister(XMM0);
    300   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    301   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    302   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    303   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    304   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    305   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    306   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    307   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    308   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    309 
    310   reg = X86_64ManagedRegister::FromX87Register(ST0);
    311   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    312   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    313   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    314   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    315   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    316   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    317   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    318   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    319   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    320 
    321   reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDX);
    322   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    323   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    324   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    325   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    326   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    327   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    328   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    329   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    330   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_ECX)));
    331   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    332 
    333   reg = X86_64ManagedRegister::FromRegisterPair(EBX_EDI);
    334   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    335   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    336   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    337   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    338   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    339   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    340   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    341   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    342   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    343   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_EBX)));
    344 
    345   reg = X86_64ManagedRegister::FromRegisterPair(EDX_ECX);
    346   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX)));
    347   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX)));
    348   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI)));
    349   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0)));
    350   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7)));
    351   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0)));
    352   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7)));
    353   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX)));
    354   EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI)));
    355   EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_EBX)));
    356 }
    357 
    358 }  // namespace x86_64
    359 }  // namespace art
    360