Add CompiledCode for method and invoke stub.

CompiledCode is the base class of CompiledMethod and
CompiledInvokeStub with a code array and an
instruction set field.

Change-Id: I4eca9b9b682b14732c8fa80d44587a7e621ab54d
diff --git a/src/compiled_method.cc b/src/compiled_method.cc
index 4b3cdee..b0285fd 100644
--- a/src/compiled_method.cc
+++ b/src/compiled_method.cc
@@ -18,6 +18,60 @@
 
 namespace art {
 
+uint32_t CompiledCode::AlignCode(uint32_t offset) const {
+  return AlignCode(offset, instruction_set_);
+}
+
+uint32_t CompiledCode::AlignCode(uint32_t offset, InstructionSet instruction_set) {
+  switch (instruction_set) {
+    case kArm:
+    case kThumb2:
+      return RoundUp(offset, kArmAlignment);
+    case kMips:
+      return RoundUp(offset, kMipsAlignment);
+    case kX86:
+      return RoundUp(offset, kX86Alignment);
+    default:
+      LOG(FATAL) << "Unknown InstructionSet: " << instruction_set;
+      return 0;
+  }
+}
+
+size_t CompiledCode::CodeDelta() const {
+  switch (instruction_set_) {
+    case kArm:
+    case kMips:
+    case kX86:
+      return 0;
+    case kThumb2: {
+      // +1 to set the low-order bit so a BLX will switch to Thumb mode
+      return 1;
+    }
+    default:
+      LOG(FATAL) << "Unknown InstructionSet: " << instruction_set_;
+      return 0;
+  }
+}
+
+const void* CompiledCode::CodePointer(const void* code_pointer,
+                                      InstructionSet instruction_set) {
+  switch (instruction_set) {
+    case kArm:
+    case kMips:
+    case kX86:
+      return code_pointer;
+    case kThumb2: {
+      uintptr_t address = reinterpret_cast<uintptr_t>(code_pointer);
+      // Set the low-order bit so a BLX will switch to Thumb mode
+      address |= 0x1;
+      return reinterpret_cast<const void*>(address);
+    }
+    default:
+      LOG(FATAL) << "Unknown InstructionSet: " << instruction_set;
+      return NULL;
+  }
+}
+
 CompiledMethod::CompiledMethod(InstructionSet instruction_set,
                                const std::vector<uint8_t>& code,
                                const size_t frame_size_in_bytes,
@@ -25,9 +79,8 @@
                                const uint32_t fp_spill_mask,
                                const std::vector<uint32_t>& mapping_table,
                                const std::vector<uint16_t>& vmap_table)
-    : instruction_set_(instruction_set), frame_size_in_bytes_(frame_size_in_bytes),
-      core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask),
-      elf_idx_(-1)
+    : CompiledCode(instruction_set), frame_size_in_bytes_(frame_size_in_bytes),
+      core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask)
 {
   CHECK_NE(code.size(), 0U);
   DCHECK_EQ(vmap_table.size(),
@@ -54,7 +107,7 @@
   DCHECK_EQ(vmap_table.size() + 1, length_prefixed_vmap_table.size());
   DCHECK_EQ(vmap_table.size(), length_prefixed_vmap_table[0]);
 
-  code_ = byte_code;
+  SetCode(byte_code);
   mapping_table_ = length_prefixed_mapping_table;
   vmap_table_ = length_prefixed_vmap_table;
   DCHECK_EQ(vmap_table_[0], static_cast<uint32_t>(__builtin_popcount(core_spill_mask) + __builtin_popcount(fp_spill_mask)));
@@ -76,31 +129,13 @@
                                const size_t frame_size_in_bytes,
                                const uint32_t core_spill_mask,
                                const uint32_t fp_spill_mask)
-    : instruction_set_(instruction_set), code_(code), frame_size_in_bytes_(frame_size_in_bytes),
-      core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask),
-      elf_idx_(-1)
-{
-  CHECK_NE(code.size(), 0U);
-}
-
-CompiledMethod::CompiledMethod(InstructionSet instruction_set,
-                               const uint16_t elf_idx,
-                               const uint16_t elf_func_idx)
-    : instruction_set_(instruction_set), frame_size_in_bytes_(0),
-      core_spill_mask_(0), fp_spill_mask_(0), elf_idx_(elf_idx),
-      elf_func_idx_(elf_func_idx) {
+    : CompiledCode(instruction_set, code),
+      frame_size_in_bytes_(frame_size_in_bytes),
+      core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask) {
 }
 
 CompiledMethod::~CompiledMethod() {}
 
-InstructionSet CompiledMethod::GetInstructionSet() const {
-  return instruction_set_;
-}
-
-const std::vector<uint8_t>& CompiledMethod::GetCode() const {
-  return code_;
-}
-
 size_t CompiledMethod::GetFrameSizeInBytes() const {
   return frame_size_in_bytes_;
 }
@@ -125,76 +160,15 @@
   return gc_map_;
 }
 
-uint32_t CompiledMethod::AlignCode(uint32_t offset) const {
-  return AlignCode(offset, instruction_set_);
+CompiledInvokeStub::CompiledInvokeStub(InstructionSet instruction_set)
+    : CompiledCode(instruction_set) {
 }
 
-uint32_t CompiledMethod::AlignCode(uint32_t offset, InstructionSet instruction_set) {
-  switch (instruction_set) {
-    case kArm:
-    case kThumb2:
-      return RoundUp(offset, kArmAlignment);
-    case kMips:
-      return RoundUp(offset, kMipsAlignment);
-    case kX86:
-      return RoundUp(offset, kX86Alignment);
-    default:
-      LOG(FATAL) << "Unknown InstructionSet: " << instruction_set;
-      return 0;
-  }
-}
-
-size_t CompiledMethod::CodeDelta() const {
-  switch (instruction_set_) {
-    case kArm:
-    case kMips:
-    case kX86:
-      return 0;
-    case kThumb2: {
-      // +1 to set the low-order bit so a BLX will switch to Thumb mode
-      return 1;
-    }
-    default:
-      LOG(FATAL) << "Unknown InstructionSet: " << instruction_set_;
-      return 0;
-  }
-}
-
-const void* CompiledMethod::CodePointer(const void* code_pointer,
-                                        InstructionSet instruction_set) {
-  switch (instruction_set) {
-    case kArm:
-    case kMips:
-    case kX86:
-      return code_pointer;
-    case kThumb2: {
-      uintptr_t address = reinterpret_cast<uintptr_t>(code_pointer);
-      // Set the low-order bit so a BLX will switch to Thumb mode
-      address |= 0x1;
-      return reinterpret_cast<const void*>(address);
-    }
-    default:
-      LOG(FATAL) << "Unknown InstructionSet: " << instruction_set;
-      return NULL;
-  }
-}
-
-#if defined(ART_USE_LLVM_COMPILER)
-CompiledInvokeStub::CompiledInvokeStub(uint16_t elf_idx, uint16_t elf_func_idx)
-    : elf_idx_(elf_idx), elf_func_idx_(elf_func_idx) {
-}
-#endif
-
-CompiledInvokeStub::CompiledInvokeStub(std::vector<uint8_t>& code)
-    : elf_idx_(-1), elf_func_idx_(-1) {
-  CHECK_NE(code.size(), 0U);
-  code_ = code;
+CompiledInvokeStub::CompiledInvokeStub(InstructionSet instruction_set,
+                                       const std::vector<uint8_t>& code)
+    : CompiledCode(instruction_set, code) {
 }
 
 CompiledInvokeStub::~CompiledInvokeStub() {}
 
-const std::vector<uint8_t>& CompiledInvokeStub::GetCode() const {
-  return code_;
-}
-
 }  // namespace art