blob: 5aa96e4574bab490d32ba06a151a053aa2050ccd [file] [log] [blame]
Ian Rogersb033c752011-07-20 12:22:35 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_MANAGED_REGISTER_H_
4#define ART_SRC_MANAGED_REGISTER_H_
5
Ian Rogers2c8f6532011-09-02 17:16:34 -07006namespace art {
7
8namespace x86 {
9class X86ManagedRegister;
10}
11namespace arm {
12class ArmManagedRegister;
13}
14
15class ManagedRegister {
16 public:
17 // ManagedRegister is a value class. There exists no method to change the
18 // internal state. We therefore allow a copy constructor and an
19 // assignment-operator.
20 ManagedRegister(const ManagedRegister& other) : id_(other.id_) { }
21
22 ManagedRegister& operator=(const ManagedRegister& other) {
23 id_ = other.id_;
24 return *this;
25 }
26
27 x86::X86ManagedRegister AsX86() const;
28 arm::ArmManagedRegister AsArm() const;
29
30 // It is valid to invoke Equals on and with a NoRegister.
31 bool Equals(const ManagedRegister& other) const {
32 return id_ == other.id_;
33 }
34
35 bool IsNoRegister() const {
36 return id_ == kNoRegister;
37 }
38
39 static ManagedRegister NoRegister() {
40 return ManagedRegister();
41 }
42
43 protected:
44 static const int kNoRegister = -1;
45
46 ManagedRegister() : id_(kNoRegister) { }
47 ManagedRegister(int reg_id) : id_(reg_id) { }
48
49 int id_;
50};
51
52} // namespace art
Ian Rogersb033c752011-07-20 12:22:35 -070053
54#endif // ART_SRC_MANAGED_REGISTER_H_