summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r--compiler/optimizing/code_generator.cc114
1 files changed, 0 insertions, 114 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc
index 1b66121ed8..3c6a41df34 100644
--- a/compiler/optimizing/code_generator.cc
+++ b/compiler/optimizing/code_generator.cc
@@ -413,120 +413,6 @@ void CodeGenerator::GenerateInvokeUnresolvedRuntimeCall(HInvokeUnresolved* invok
InvokeRuntime(entrypoint, invoke, invoke->GetDexPc(), nullptr);
}
-void CodeGenerator::CreateUnresolvedFieldLocationSummary(
- HInstruction* field_access,
- Primitive::Type field_type,
- const FieldAccessCallingConvetion& calling_convention) {
- bool is_instance = field_access->IsUnresolvedInstanceFieldGet()
- || field_access->IsUnresolvedInstanceFieldSet();
- bool is_get = field_access->IsUnresolvedInstanceFieldGet()
- || field_access->IsUnresolvedStaticFieldGet();
-
- ArenaAllocator* allocator = field_access->GetBlock()->GetGraph()->GetArena();
- LocationSummary* locations =
- new (allocator) LocationSummary(field_access, LocationSummary::kCall);
-
- locations->AddTemp(calling_convention.GetFieldIndexLocation());
-
- if (is_instance) {
- // Add the `this` object for instance field accesses.
- locations->SetInAt(0, calling_convention.GetObjectLocation());
- }
-
- // Note that pSetXXStatic/pGetXXStatic always takes/returns an int or int64
- // regardless of the the type. Because of that we forced to special case
- // the access to floating point values.
- if (is_get) {
- if (Primitive::IsFloatingPointType(field_type)) {
- // The return value will be stored in regular registers while register
- // allocator expects it in a floating point register. Allocate a temp for
- // it and make the transfer at codegen.
- AddLocationAsTemp(calling_convention.GetReturnLocation(field_type), locations);
- locations->SetOut(calling_convention.GetFpuLocation(field_type));
- } else {
- locations->SetOut(calling_convention.GetReturnLocation(field_type));
- }
- } else {
- size_t set_index = is_instance ? 1 : 0;
- if (Primitive::IsFloatingPointType(field_type)) {
- // The set value comes from a float location while the calling convention
- // expects it in a regular register location. Allocate a temp for it and
- // make the transfer at codegen.
- AddLocationAsTemp(calling_convention.GetSetValueLocation(field_type, is_instance), locations);
- locations->SetInAt(set_index, calling_convention.GetFpuLocation(field_type));
- } else {
- locations->SetInAt(set_index,
- calling_convention.GetSetValueLocation(field_type, is_instance));
- }
- }
-}
-
-void CodeGenerator::GenerateUnresolvedFieldAccess(HInstruction* field_access,
- Primitive::Type field_type,
- uint32_t field_index,
- uint32_t dex_pc) {
- LocationSummary* locations = field_access->GetLocations();
-
- MoveConstant(locations->GetTemp(0), field_index);
-
- bool is_instance = field_access->IsUnresolvedInstanceFieldGet()
- || field_access->IsUnresolvedInstanceFieldSet();
- bool is_get = field_access->IsUnresolvedInstanceFieldGet()
- || field_access->IsUnresolvedStaticFieldGet();
-
- if (!is_get && Primitive::IsFloatingPointType(field_type)) {
- MoveLocationToTemp(locations->InAt(is_instance ? 1 : 0), *locations, 1, field_type);
- }
-
- QuickEntrypointEnum entrypoint = kQuickSet8Static; // Initialize to anything to avoid warnings.
- switch (field_type) {
- case Primitive::kPrimBoolean:
- entrypoint = is_instance
- ? (is_get ? kQuickGetBooleanInstance : kQuickSet8Instance)
- : (is_get ? kQuickGetBooleanStatic : kQuickSet8Static);
- break;
- case Primitive::kPrimByte:
- entrypoint = is_instance
- ? (is_get ? kQuickGetByteInstance : kQuickSet8Instance)
- : (is_get ? kQuickGetByteStatic : kQuickSet8Static);
- break;
- case Primitive::kPrimShort:
- entrypoint = is_instance
- ? (is_get ? kQuickGetShortInstance : kQuickSet16Instance)
- : (is_get ? kQuickGetShortStatic : kQuickSet16Static);
- break;
- case Primitive::kPrimChar:
- entrypoint = is_instance
- ? (is_get ? kQuickGetCharInstance : kQuickSet16Instance)
- : (is_get ? kQuickGetCharStatic : kQuickSet16Static);
- break;
- case Primitive::kPrimInt:
- case Primitive::kPrimFloat:
- entrypoint = is_instance
- ? (is_get ? kQuickGet32Instance : kQuickSet32Instance)
- : (is_get ? kQuickGet32Static : kQuickSet32Static);
- break;
- case Primitive::kPrimNot:
- entrypoint = is_instance
- ? (is_get ? kQuickGetObjInstance : kQuickSetObjInstance)
- : (is_get ? kQuickGetObjStatic : kQuickSetObjStatic);
- break;
- case Primitive::kPrimLong:
- case Primitive::kPrimDouble:
- entrypoint = is_instance
- ? (is_get ? kQuickGet64Instance : kQuickSet64Instance)
- : (is_get ? kQuickGet64Static : kQuickSet64Static);
- break;
- default:
- LOG(FATAL) << "Invalid type " << field_type;
- }
- InvokeRuntime(entrypoint, field_access, dex_pc, nullptr);
-
- if (is_get && Primitive::IsFloatingPointType(field_type)) {
- MoveTempToLocation(*locations, 1, locations->Out(), field_type);
- }
-}
-
void CodeGenerator::BlockIfInRegister(Location location, bool is_out) const {
// The DCHECKS below check that a register is not specified twice in
// the summary. The out location can overlap with an input, so we need