Move rest of code related blobs from Method to oat

Change-Id: I55041b564ab65317c8b1f863005f20ba650a0322
diff --git a/src/compiled_method.cc b/src/compiled_method.cc
new file mode 100644
index 0000000..2846ab3
--- /dev/null
+++ b/src/compiled_method.cc
@@ -0,0 +1,157 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+#include "compiled_method.h"
+
+namespace art {
+
+CompiledMethod::CompiledMethod(InstructionSet instruction_set,
+                               std::vector<short>& short_code,
+                               const size_t frame_size_in_bytes,
+                               const size_t return_pc_offset_in_bytes,
+                               const uint32_t core_spill_mask,
+                               const uint32_t fp_spill_mask,
+                               std::vector<uint32_t>& mapping_table,
+                               std::vector<uint16_t>& vmap_table) {
+  CHECK_NE(short_code.size(), 0U);
+
+  size_t code_byte_count = short_code.size() * sizeof(short_code[0]);
+  std::vector<uint8_t> byte_code(code_byte_count);
+  memcpy(&byte_code[0], &short_code[0], code_byte_count);
+
+  std::vector<uint32_t> length_prefixed_mapping_table;
+  length_prefixed_mapping_table.push_back(mapping_table.size());
+  length_prefixed_mapping_table.insert(length_prefixed_mapping_table.end(),
+                                       mapping_table.begin(),
+                                       mapping_table.end());
+  DCHECK_EQ(mapping_table.size() + 1, length_prefixed_mapping_table.size());
+
+  std::vector<uint16_t> length_prefixed_vmap_table;
+  length_prefixed_vmap_table.push_back(vmap_table.size());
+  length_prefixed_vmap_table.insert(length_prefixed_vmap_table.end(),
+                                    vmap_table.begin(),
+                                    vmap_table.end());
+  DCHECK_EQ(vmap_table.size() + 1, length_prefixed_vmap_table.size());
+
+  instruction_set_ = instruction_set;
+  code_ = byte_code;
+  frame_size_in_bytes_ = frame_size_in_bytes;
+  return_pc_offset_in_bytes_ = return_pc_offset_in_bytes;
+  core_spill_mask_ = core_spill_mask;
+  fp_spill_mask_ = fp_spill_mask;
+  mapping_table_ = length_prefixed_mapping_table;
+  vmap_table_ = length_prefixed_vmap_table;
+}
+
+CompiledMethod::CompiledMethod(InstructionSet instruction_set,
+                               std::vector<uint8_t>& code,
+                               const size_t frame_size_in_bytes,
+                               const size_t return_pc_offset_in_bytes,
+                               const uint32_t core_spill_mask,
+                               const uint32_t fp_spill_mask) {
+  CHECK_NE(code.size(), 0U);
+
+  instruction_set_ = instruction_set;
+  code_ = code;
+  frame_size_in_bytes_ = frame_size_in_bytes;
+  return_pc_offset_in_bytes_ = return_pc_offset_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_;
+}
+
+size_t CompiledMethod::GetReturnPcOffsetInBytes() const {
+  return return_pc_offset_in_bytes_;
+}
+
+uint32_t CompiledMethod::GetCoreSpillMask() const {
+  return core_spill_mask_;
+}
+
+uint32_t CompiledMethod::GetFpSpillMask() const {
+  return fp_spill_mask_;
+}
+
+const std::vector<uint32_t>& CompiledMethod::GetMappingTable() const {
+  return mapping_table_;
+}
+
+const std::vector<uint16_t>& CompiledMethod::GetVmapTable() const {
+  return vmap_table_;
+}
+
+uint32_t CompiledMethod::AlignCode(uint32_t offset) const {
+  return AlignCode(offset, instruction_set_);
+}
+
+uint32_t CompiledMethod::AlignCode(uint32_t offset, InstructionSet instruction_set) {
+  switch (instruction_set) {
+    case kArm:
+    case kThumb2:
+      return RoundUp(offset, kArmAlignment);
+    case kX86:
+      return offset;
+    default:
+      LOG(FATAL) << "Unknown InstructionSet " << (int) instruction_set;
+      return 0;
+  }
+}
+
+size_t CompiledMethod::CodeDelta() const {
+  switch (instruction_set_) {
+    case kArm:
+    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 " << (int) instruction_set_;
+      return NULL;
+  }
+}
+
+const void* CompiledMethod::CodePointer(const void* code_pointer,
+                                        InstructionSet instruction_set) {
+  switch (instruction_set) {
+    case kArm:
+    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 " << (int) instruction_set;
+      return NULL;
+  }
+}
+
+
+CompiledInvokeStub::CompiledInvokeStub(std::vector<uint8_t>& code) {
+  CHECK_NE(code.size(), 0U);
+  code_ = code;
+}
+
+CompiledInvokeStub::~CompiledInvokeStub() {}
+
+const std::vector<uint8_t>& CompiledInvokeStub::GetCode() const {
+  return code_;
+}
+
+}  // namespace art