1fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko/* 2fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * Copyright (C) 2014 The Android Open Source Project 3fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * 4fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * Licensed under the Apache License, Version 2.0 (the "License"); 5fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * you may not use this file except in compliance with the License. 6fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * You may obtain a copy of the License at 7fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * 8fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * http://www.apache.org/licenses/LICENSE-2.0 9fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * 10fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * Unless required by applicable law or agreed to in writing, software 11fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * distributed under the License is distributed on an "AS IS" BASIS, 12fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * See the License for the specific language governing permissions and 14fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko * limitations under the License. 15fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko */ 16fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 17fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko#include "globals.h" 18fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko#include "managed_register_x86_64.h" 19fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko#include "gtest/gtest.h" 20fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 21fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenkonamespace art { 22fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenkonamespace x86_64 { 23fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 24fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, NoRegister) { 25fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg = ManagedRegister::NoRegister().AsX86(); 26fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsNoRegister()); 27fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(reg)); 28fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 29fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 30fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, CpuRegister) { 31fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg = X86_64ManagedRegister::FromCpuRegister(RAX); 32fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 33fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsCpuRegister()); 34fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 35fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 36fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 37fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RAX, reg.AsCpuRegister()); 38fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 39fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromCpuRegister(RBX); 40fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 41fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsCpuRegister()); 42fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 43fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 44fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 45fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RBX, reg.AsCpuRegister()); 46fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 47fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromCpuRegister(RCX); 48fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 49fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsCpuRegister()); 50fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 51fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 52fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 53fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RCX, reg.AsCpuRegister()); 54fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 55fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromCpuRegister(RDI); 56fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 57fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsCpuRegister()); 58fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 59fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 60fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 61fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDI, reg.AsCpuRegister()); 62fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 63fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 64fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, XmmRegister) { 65fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg = X86_64ManagedRegister::FromXmmRegister(XMM0); 66fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 67fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 68fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsXmmRegister()); 69fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 70fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 71fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(XMM0, reg.AsXmmRegister()); 72fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 73fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromXmmRegister(XMM1); 74fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 75fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 76fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsXmmRegister()); 77fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 78fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 79fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(XMM1, reg.AsXmmRegister()); 80fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 81fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromXmmRegister(XMM7); 82fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 83fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 84fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsXmmRegister()); 85fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 86fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 87fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(XMM7, reg.AsXmmRegister()); 88fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 89fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 90fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, X87Register) { 91fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg = X86_64ManagedRegister::FromX87Register(ST0); 92fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 93fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 94fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 95fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsX87Register()); 96fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 97fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(ST0, reg.AsX87Register()); 98fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 99fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromX87Register(ST1); 100fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 101fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 102fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 103fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsX87Register()); 104fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 105fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(ST1, reg.AsX87Register()); 106fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 107fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromX87Register(ST7); 108fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 109fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 110fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 111fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsX87Register()); 112fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsRegisterPair()); 113fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(ST7, reg.AsX87Register()); 114fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 115fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 116fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, RegisterPair) { 117fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDX); 118fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 119fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 120fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 121fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 122fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 123fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RAX, reg.AsRegisterPairLow()); 124fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDX, reg.AsRegisterPairHigh()); 125fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 126fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EAX_ECX); 127fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 128fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 129fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 130fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 131fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 132fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RAX, reg.AsRegisterPairLow()); 133fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RCX, reg.AsRegisterPairHigh()); 134fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 135fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EAX_EBX); 136fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 137fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 138fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 139fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 140fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 141fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RAX, reg.AsRegisterPairLow()); 142fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RBX, reg.AsRegisterPairHigh()); 143fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 144fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDI); 145fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 146fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 147fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 148fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 149fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 150fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RAX, reg.AsRegisterPairLow()); 151fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDI, reg.AsRegisterPairHigh()); 152fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 153fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EDX_ECX); 154fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 155fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 156fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 157fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 158fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 159fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDX, reg.AsRegisterPairLow()); 160fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RCX, reg.AsRegisterPairHigh()); 161fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 162fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EDX_EBX); 163fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 164fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 165fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 166fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 167fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 168fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDX, reg.AsRegisterPairLow()); 169fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RBX, reg.AsRegisterPairHigh()); 170fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 171fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EDX_EDI); 172fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 173fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 174fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 175fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 176fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 177fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDX, reg.AsRegisterPairLow()); 178fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDI, reg.AsRegisterPairHigh()); 179fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 180fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(ECX_EBX); 181fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 182fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 183fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 184fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 185fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 186fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RCX, reg.AsRegisterPairLow()); 187fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RBX, reg.AsRegisterPairHigh()); 188fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 189fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(ECX_EDI); 190fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 191fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 192fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 193fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 194fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 195fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RCX, reg.AsRegisterPairLow()); 196fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDI, reg.AsRegisterPairHigh()); 197fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 198fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EBX_EDI); 199fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsNoRegister()); 200fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsCpuRegister()); 201fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsXmmRegister()); 202fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.IsX87Register()); 203fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.IsRegisterPair()); 204fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RBX, reg.AsRegisterPairLow()); 205fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_EQ(RDI, reg.AsRegisterPairHigh()); 206fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 207fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 208fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, Equals) { 209fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg_eax = X86_64ManagedRegister::FromCpuRegister(RAX); 210fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RAX))); 211fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RBX))); 212fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromCpuRegister(RDI))); 213fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0))); 214fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7))); 215fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromX87Register(ST0))); 216fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromX87Register(ST7))); 217fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 218fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_eax.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 219fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 220fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg_xmm0 = X86_64ManagedRegister::FromXmmRegister(XMM0); 221fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RAX))); 222fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RBX))); 223fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromCpuRegister(RDI))); 224fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg_xmm0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0))); 225fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7))); 226fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromX87Register(ST0))); 227fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromX87Register(ST7))); 228fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 229fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_xmm0.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 230fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 231fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg_st0 = X86_64ManagedRegister::FromX87Register(ST0); 232fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RAX))); 233fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RBX))); 234fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromCpuRegister(RDI))); 235fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0))); 236fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7))); 237fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg_st0.Equals(X86_64ManagedRegister::FromX87Register(ST0))); 238fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromX87Register(ST7))); 239fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 240fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_st0.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 241fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 242fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg_pair = X86_64ManagedRegister::FromRegisterPair(EAX_EDX); 243fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RAX))); 244fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RBX))); 245fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromCpuRegister(RDI))); 246fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromXmmRegister(XMM0))); 247fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromXmmRegister(XMM7))); 248fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromX87Register(ST0))); 249fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromX87Register(ST7))); 250fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg_pair.Equals(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 251fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg_pair.Equals(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 252fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 253fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 254fca82208f7128fcda09b6a4743199308332558a2Dmitry PetrochenkoTEST(X86_64ManagedRegister, Overlaps) { 255fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko X86_64ManagedRegister reg = X86_64ManagedRegister::FromCpuRegister(RAX); 256fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 257fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 258fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 259fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 260fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 261fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 262fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 263fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 264fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 265fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 266fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromCpuRegister(RDX); 267fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 268fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 269fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 270fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 271fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 272fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 273fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 274fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 275fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 276fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 277fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromCpuRegister(RDI); 278fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 279fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 280fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 281fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 282fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 283fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 284fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 285fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 286fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 287fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 288fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromCpuRegister(RBX); 289fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 290fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 291fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 292fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 293fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 294fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 295fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 296fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 297fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 298fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 299fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromXmmRegister(XMM0); 300fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 301fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 302fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 303fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 304fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 305fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 306fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 307fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 308fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 309fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 310fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromX87Register(ST0); 311fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 312fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 313fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 314fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 315fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 316fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 317fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 318fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 319fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 320fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 321fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EAX_EDX); 322fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 323fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 324fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 325fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 326fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 327fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 328fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 329fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 330fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_ECX))); 331fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 332fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 333fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EBX_EDI); 334fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 335fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 336fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 337fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 338fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 339fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 340fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 341fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 342fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 343fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_EBX))); 344fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 345fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko reg = X86_64ManagedRegister::FromRegisterPair(EDX_ECX); 346fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RAX))); 347fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RBX))); 348fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromCpuRegister(RDI))); 349fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM0))); 350fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromXmmRegister(XMM7))); 351fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST0))); 352fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromX87Register(ST7))); 353fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EAX_EDX))); 354fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(!reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EBX_EDI))); 355fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko EXPECT_TRUE(reg.Overlaps(X86_64ManagedRegister::FromRegisterPair(EDX_EBX))); 356fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} 357fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko 358fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} // namespace x86_64 359fca82208f7128fcda09b6a4743199308332558a2Dmitry Petrochenko} // namespace art 360