blob: aa8ed460a57fdb22f3881641522277133fcd2f52 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ART_COMPILER_DEX_REG_LOCATION_H_
#define ART_COMPILER_DEX_REG_LOCATION_H_
#include "reg_storage.h"
namespace art {
static constexpr int16_t INVALID_SREG = -1;
/*
* Whereas a SSA name describes a definition of a Dalvik vreg, the RegLocation describes
* the type of an SSA name (and, can also be used by code generators to record where the
* value is located (i.e. - physical register, frame, spill, etc.). For each SSA name (SReg)
* there is a RegLocation.
* A note on SSA names:
* o SSA names for Dalvik vRegs v0..vN will be assigned 0..N. These represent the "vN_0"
* names. Negative SSA names represent special values not present in the Dalvik byte code.
* For example, SSA name -1 represents an invalid SSA name, and SSA name -2 represents the
* the Method pointer. SSA names < -2 are reserved for future use.
* o The vN_0 names for non-argument Dalvik should in practice never be used (as they would
* represent the read of an undefined local variable). The first definition of the
* underlying Dalvik vReg will result in a vN_1 name.
*
* FIXME: The orig_sreg field was added as a workaround for llvm bitcode generation. With
* the latest restructuring, we should be able to remove it and rely on s_reg_low throughout.
*/
struct RegLocation {
RegLocationType location:3;
unsigned wide:1;
unsigned defined:1; // Do we know the type?
unsigned is_const:1; // Constant, value in mir_graph->constant_values[].
unsigned fp:1; // Floating point?
unsigned core:1; // Non-floating point?
unsigned ref:1; // Something GC cares about.
unsigned high_word:1; // High word of pair?
unsigned home:1; // Does this represent the home location?
RegStorage reg; // Encoded physical registers.
int16_t s_reg_low; // SSA name for low Dalvik word.
int16_t orig_sreg; // TODO: remove after Bitcode gen complete
// and consolidate usage w/ s_reg_low.
};
} // namespace art
#endif // ART_COMPILER_DEX_REG_LOCATION_H_