5#ifndef RUNTIME_VM_COMPILER_BACKEND_PARALLEL_MOVE_RESOLVER_H_
6#define RUNTIME_VM_COMPILER_BACKEND_PARALLEL_MOVE_RESOLVER_H_
8#if defined(DART_PRECOMPILED_RUNTIME)
9#error "AOT runtime should not use compiler sources (including header files)"
38 void AddMoveToSchedule(
int index);
42 void AddSwapToSchedule(
int index);
49 enum class OpKind : uint8_t {
71 : compiler_(
compiler), parallel_move_(parallel_move) {}
76 class ScratchFpuRegisterScope :
public ValueObject {
79 ~ScratchFpuRegisterScope();
89 class TemporaryAllocator :
public TemporaryRegisterAllocator {
93 Register AllocateTemporary()
override;
94 void ReleaseTemporary()
override;
95 DEBUG_ONLY(
bool DidAllocateTemporary() {
return allocated_; })
110 ~ScratchRegisterScope();
112 Register reg()
const {
return reg_; }
115 TemporaryAllocator allocator_;
119 bool IsScratchLocation(
Location loc);
122 intptr_t first_free_register,
123 intptr_t last_free_register,
132 void EmitMove(
const MoveOperands& move);
134 void EmitSwap(
const MoveOperands&
swap);
141 void MoveMemoryToMemory(
const compiler::Address&
dst,
142 const compiler::Address&
src);
143 void Exchange(
Register reg,
const compiler::Address& mem);
144 void Exchange(
const compiler::Address& mem1,
const compiler::Address& mem2);
147 intptr_t stack_offset1,
149 intptr_t stack_offset2);
151 FlowGraphCompiler*
const compiler_;
152 ParallelMoveInstr* parallel_move_;
153 intptr_t current_move_;
void swap(sk_sp< T > &a, sk_sp< T > &b)
ParallelMoveEmitter(FlowGraphCompiler *compiler, ParallelMoveInstr *parallel_move)
void Resolve(ParallelMoveInstr *parallel_move)