Coverage for /Syzygy/assm/register.cc

CoverageLines executed / instrumented / missingexe / inst / missLanguageGroup
100.0%61610.C++source

Line-by-line coverage:

   1    :  // Copyright 2013 Google Inc. All Rights Reserved.
   2    :  //
   3    :  // Licensed under the Apache License, Version 2.0 (the "License");
   4    :  // you may not use this file except in compliance with the License.
   5    :  // You may obtain a copy of the License at
   6    :  //
   7    :  //     http://www.apache.org/licenses/LICENSE-2.0
   8    :  //
   9    :  // Unless required by applicable law or agreed to in writing, software
  10    :  // distributed under the License is distributed on an "AS IS" BASIS,
  11    :  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12    :  // See the License for the specific language governing permissions and
  13    :  // limitations under the License.
  14    :  
  15    :  #include "syzygy/assm/register.h"
  16    :  
  17    :  namespace assm {
  18    :  
  19    :  // A register factory.
  20    :  class RegisterBuilder {
  21    :   public:
  22  E :    static const Register8 Create8(RegisterId id) { return Register8(id); }
  23  E :    static const Register16 Create16(RegisterId id) { return Register16(id); }
  24  E :    static const Register32 Create32(RegisterId id) { return Register32(id); }
  25    :  };
  26    :  
  27    :  // An array of all registers.
  28    :  const Register kRegisters[kRegisterCount] = {
  29    :      // 8-bit registers.
  30  E :      RegisterBuilder::Create8(kRegisterAl),
  31  E :      RegisterBuilder::Create8(kRegisterCl),
  32  E :      RegisterBuilder::Create8(kRegisterDl),
  33  E :      RegisterBuilder::Create8(kRegisterBl),
  34  E :      RegisterBuilder::Create8(kRegisterAh),
  35  E :      RegisterBuilder::Create8(kRegisterCh),
  36  E :      RegisterBuilder::Create8(kRegisterDh),
  37  E :      RegisterBuilder::Create8(kRegisterBh),
  38    :  
  39    :      // 16-bit registers.
  40  E :      RegisterBuilder::Create16(kRegisterAx),
  41  E :      RegisterBuilder::Create16(kRegisterCx),
  42  E :      RegisterBuilder::Create16(kRegisterDx),
  43  E :      RegisterBuilder::Create16(kRegisterBx),
  44  E :      RegisterBuilder::Create16(kRegisterSp),
  45  E :      RegisterBuilder::Create16(kRegisterBp),
  46  E :      RegisterBuilder::Create16(kRegisterSi),
  47  E :      RegisterBuilder::Create16(kRegisterDi),
  48    :  
  49    :      // 32-bit registers.
  50  E :      RegisterBuilder::Create32(kRegisterEax),
  51  E :      RegisterBuilder::Create32(kRegisterEcx),
  52  E :      RegisterBuilder::Create32(kRegisterEdx),
  53  E :      RegisterBuilder::Create32(kRegisterEbx),
  54  E :      RegisterBuilder::Create32(kRegisterEsp),
  55  E :      RegisterBuilder::Create32(kRegisterEbp),
  56  E :      RegisterBuilder::Create32(kRegisterEsi),
  57  E :      RegisterBuilder::Create32(kRegisterEdi)
  58  E :  };
  59    :  
  60    :  // Slices into the array of all registers, by register size.
  61    :  typedef const Register8 (&Register8Array)[kRegister8Count];
  62    :  Register8Array kRegisters8 =
  63    :      reinterpret_cast<Register8Array>(kRegisters[kRegister8Min]);
  64    :  
  65    :  typedef const Register16 (&Register16Array)[kRegister16Count];
  66    :  Register16Array kRegisters16 =
  67    :      reinterpret_cast<Register16Array>(kRegisters[kRegister16Min]);
  68    :  
  69    :  typedef const Register32 (&Register32Array)[kRegister32Count];
  70    :  Register32Array kRegisters32 =
  71    :      reinterpret_cast<Register32Array>(kRegisters[kRegister32Min]);
  72    :  
  73    :  // Convenience constants for each individual register.
  74  E :  const Register8& al = kRegisters8[0];
  75  E :  const Register8& cl = kRegisters8[1];
  76  E :  const Register8& dl = kRegisters8[2];
  77  E :  const Register8& bl = kRegisters8[3];
  78  E :  const Register8& ah = kRegisters8[4];
  79  E :  const Register8& ch = kRegisters8[5];
  80  E :  const Register8& dh = kRegisters8[6];
  81  E :  const Register8& bh = kRegisters8[7];
  82    :  
  83  E :  const Register16& ax = kRegisters16[0];
  84  E :  const Register16& cx = kRegisters16[1];
  85  E :  const Register16& dx = kRegisters16[2];
  86  E :  const Register16& bx = kRegisters16[3];
  87  E :  const Register16& sp = kRegisters16[4];
  88  E :  const Register16& bp = kRegisters16[5];
  89  E :  const Register16& si = kRegisters16[6];
  90  E :  const Register16& di = kRegisters16[7];
  91    :  
  92  E :  const Register32& eax = kRegisters32[0];
  93  E :  const Register32& ecx = kRegisters32[1];
  94  E :  const Register32& edx = kRegisters32[2];
  95  E :  const Register32& ebx = kRegisters32[3];
  96  E :  const Register32& esp = kRegisters32[4];
  97  E :  const Register32& ebp = kRegisters32[5];
  98  E :  const Register32& esi = kRegisters32[6];
  99  E :  const Register32& edi = kRegisters32[7];
 100    :  
 101  E :  const Register& Register::Get(RegisterId id) {
 102  E :    DCHECK_LE(kRegisterMin, id);
 103  E :    DCHECK_GT(kRegisterMax, id);
 104  E :    return kRegisters[id];
 105  E :  }
 106    :  
 107    :  const Register8& CastAsRegister8(const Register& reg) {
 108    :    DCHECK_EQ(kSize8Bit, reg.size());
 109    :    return reinterpret_cast<const Register8&>(reg);
 110    :  }
 111    :  
 112    :  const Register16& CastAsRegister16(const Register& reg) {
 113    :    DCHECK_EQ(kSize16Bit, reg.size());
 114    :    return reinterpret_cast<const Register16&>(reg);
 115    :  }
 116    :  
 117  E :  const Register32& CastAsRegister32(const Register& reg) {
 118  E :    DCHECK_EQ(kSize32Bit, reg.size());
 119  E :    return reinterpret_cast<const Register32&>(reg);
 120  E :  }
 121    :  
 122    :  }  // namespace assm

Coverage information generated Fri Jul 29 11:00:21 2016.