blob: 4895a749c9b334d124d5c13934431add953be1e4 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef VM_ASSEMBLER_ARM_H_
#define VM_ASSEMBLER_ARM_H_
#ifndef VM_ASSEMBLER_H_
#error Do not include assembler_arm.h directly; use assembler.h instead.
#endif
#include "platform/assert.h"
#include "vm/constants_arm.h"
namespace dart {
class Label : public ValueObject {
public:
Label() : position_(0) { }
~Label() {
// Assert if label is being destroyed with unresolved branches pending.
ASSERT(!IsLinked());
}
// Returns the position for bound and linked labels. Cannot be used
// for unused labels.
int Position() const {
ASSERT(!IsUnused());
return IsBound() ? -position_ - kWordSize : position_ - kWordSize;
}
bool IsBound() const { return position_ < 0; }
bool IsUnused() const { return position_ == 0; }
bool IsLinked() const { return position_ > 0; }
private:
int position_;
void Reinitialize() {
position_ = 0;
}
void BindTo(int position) {
ASSERT(!IsBound());
position_ = -position - kWordSize;
ASSERT(IsBound());
}
void LinkTo(int position) {
ASSERT(!IsBound());
position_ = position + kWordSize;
ASSERT(IsLinked());
}
friend class Assembler;
DISALLOW_COPY_AND_ASSIGN(Label);
};
class Assembler {
public:
Assembler() { }
~Assembler() { }
// Macros for High-level operations.
void AddConstant(Register reg, int value, Condition cond = AL) {
UNIMPLEMENTED();
}
// Misc. functionality
int CodeSize() const {
UNIMPLEMENTED();
return 0;
}
int prolog_offset() const {
UNIMPLEMENTED();
return 0;
}
const ZoneGrowableArray<int>& GetPointerOffsets() const {
UNIMPLEMENTED();
return *pointer_offsets_;
}
void FinalizeInstructions(const MemoryRegion& region) {
UNIMPLEMENTED();
}
// Debugging and bringup support.
void Stop(const char* message) { UNIMPLEMENTED(); }
void Unimplemented(const char* message);
void Untested(const char* message);
void Unreachable(const char* message);
static void InitializeMemoryWithBreakpoints(uword data, int length) {
UNIMPLEMENTED();
}
private:
ZoneGrowableArray<int>* pointer_offsets_;
DISALLOW_ALLOCATION();
DISALLOW_COPY_AND_ASSIGN(Assembler);
};
} // namespace dart
#endif // VM_ASSEMBLER_ARM_H_