Index: src/assembler_constants_ia32.h |
diff --git a/src/assembler_constants_ia32.h b/src/assembler_constants_ia32.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f11c2863bd24b3652ce4e22ca74870b04c0951a2 |
--- /dev/null |
+++ b/src/assembler_constants_ia32.h |
@@ -0,0 +1,131 @@ |
+// Copyright (c) 2013, 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. |
+// |
+// Modified by the Subzero authors. |
+// |
+//===- subzero/src/assembler_constants_ia32.h - x86-32 consts ---*- C++ -*-===// |
+// |
+// The Subzero Code Generator |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+// |
+// This file contains constants related to the assembler encoding |
+// of x86-32 operands. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#ifndef SUBZERO_SRC_ASSEMBLER_CONSTANTS_IA32_H_ |
+#define SUBZERO_SRC_ASSEMBLER_CONSTANTS_IA32_H_ |
+ |
+namespace Ice { |
+namespace x86 { |
+ |
+// Unify w/ Ice... |
+enum Register { |
+ kFirstFreeCpuRegister = 0, |
+ EAX = 0, |
+ ECX = 1, |
+ EDX = 2, |
+ EBX = 3, |
+ ESP = 4, |
+ EBP = 5, |
+ ESI = 6, |
+ EDI = 7, |
+ kLastFreeCpuRegister = 7, |
+ kNoRegister = -1 // Signals an illegal register. |
+}; |
+ |
+// Unify w/ Ice... |
+enum ByteRegister { |
+ AL = 0, |
+ CL = 1, |
+ DL = 2, |
+ BL = 3, |
+ AH = 4, |
+ CH = 5, |
+ DH = 6, |
+ BH = 7, |
+ kNoByteRegister = -1 // Signals an illegal register. |
+}; |
+ |
+// Unify w/ Ice... |
+enum XmmRegister { |
+ XMM0 = 0, |
+ XMM1 = 1, |
+ XMM2 = 2, |
+ XMM3 = 3, |
+ XMM4 = 4, |
+ XMM5 = 5, |
+ XMM6 = 6, |
+ XMM7 = 7, |
+ kNoXmmRegister = -1 // Signals an illegal register. |
+}; |
+ |
+// Unify w/ Ice... |
+enum ScaleFactor { TIMES_1 = 0, TIMES_2 = 1, TIMES_4 = 2, TIMES_8 = 3 }; |
+ |
+// Unify w/ Ice... |
+enum Condition { |
+ DID_OVERFLOW = 0, |
+ NO_OVERFLOW = 1, |
+ BELOW = 2, |
+ ABOVE_EQUAL = 3, |
+ EQUAL = 4, |
+ NOT_EQUAL = 5, |
+ BELOW_EQUAL = 6, |
+ ABOVE = 7, |
+ SIGN = 8, |
+ NOT_SIGN = 9, |
+ PARITY_EVEN = 10, |
+ PARITY_ODD = 11, |
+ LESS = 12, |
+ GREATER_EQUAL = 13, |
+ LESS_EQUAL = 14, |
+ GREATER = 15, |
+ |
+ ZERO = EQUAL, |
+ NOT_ZERO = NOT_EQUAL, |
+ NEGATIVE = SIGN, |
+ POSITIVE = NOT_SIGN, |
+ CARRY = BELOW, |
+ NOT_CARRY = ABOVE_EQUAL |
+}; |
+ |
+// TODO(jvoung): We probably don't need to initialize the buffers |
+// with breakpoints, since we're not directly executing them. |
+class Instr { |
+public: |
+ static const uint8_t kHltInstruction = 0xF4; |
+ // We prefer not to use the int3 instruction since it conflicts with gdb. |
+ static const uint8_t kBreakPointInstruction = kHltInstruction; |
+ static const int kBreakPointInstructionSize = 1; |
+ |
+ bool IsBreakPoint() { |
+ assert(kBreakPointInstructionSize == 1); |
+ return (*reinterpret_cast<const uint8_t *>(this)) == kBreakPointInstruction; |
+ } |
+ |
+ // Instructions are read out of a code stream. The only way to get a |
+ // reference to an instruction is to convert a pointer. There is no way |
+ // to allocate or create instances of class Instr. |
+ // Use the At(pc) function to create references to Instr. |
+ static Instr *At(uintptr_t pc) { return reinterpret_cast<Instr *>(pc); } |
+ |
+ // private: |
+ // DISALLOW_ALLOCATION(); |
+ // We need to prevent the creation of instances of class Instr. |
+ // DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); |
+}; |
+ |
+// The largest multibyte nop we will emit. This could go up to 15 if it |
+// becomes important to us. |
+const int MAX_NOP_SIZE = 8; |
+ |
+} // end of namespace x86 |
+} // end of namespace Ice |
+ |
+#endif // SUBZERO_SRC_ASSEMBLER_CONSTANTS_IA32_H_ |