x86 JNI compiler and unit tests.
Change-Id: I4c2e10328961a2e8e27c90777fe2a93737b21143
diff --git a/src/assembler.h b/src/assembler.h
index 228612e..84462c5 100644
--- a/src/assembler.h
+++ b/src/assembler.h
@@ -13,6 +13,40 @@
class AssemblerBuffer;
class AssemblerFixup;
+// Allow the meaning of offsets to be strongly typed
+class Offset {
+ public:
+ explicit Offset(size_t val) : val_(val) {}
+ int32_t Int32Value() const {
+ return static_cast<int32_t>(val_);
+ }
+ uint32_t Uint32Value() const {
+ return static_cast<uint32_t>(val_);
+ }
+ protected:
+ size_t val_;
+};
+std::ostream& operator<<(std::ostream& os, const Offset& offs);
+
+// Offsets relative to the current frame
+class FrameOffset : public Offset {
+ public:
+ explicit FrameOffset(size_t val) : Offset(val) {}
+ bool operator>(FrameOffset other) const { return val_ > other.val_; }
+ bool operator<(FrameOffset other) const { return val_ < other.val_; }
+};
+
+// Offsets relative to the current running thread
+class ThreadOffset : public Offset {
+ public:
+ explicit ThreadOffset(size_t val) : Offset(val) {}
+};
+
+// Offsets relative to an object
+class MemberOffset : public Offset {
+ public:
+ explicit MemberOffset(size_t val) : Offset(val) {}
+};
class Label {
public:
@@ -160,7 +194,7 @@
// Make sure the generated instruction doesn't take up more
// space than the minimum gap.
int delta = gap_ - ComputeGap();
- CHECK(delta <= kMinimumGap);
+ CHECK_LE(delta, kMinimumGap);
}
private: