Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1159)

Unified Diff: runtime/vm/constants_mips.h

Issue 2858623002: Remove MIPS support (Closed)
Patch Set: Merge and cleanup Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/cpu.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/constants_mips.h
diff --git a/runtime/vm/constants_mips.h b/runtime/vm/constants_mips.h
deleted file mode 100644
index cb13a4a1772b7faa6cc8909dd2e1865a91ee288f..0000000000000000000000000000000000000000
--- a/runtime/vm/constants_mips.h
+++ /dev/null
@@ -1,644 +0,0 @@
-// 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.
-
-#ifndef RUNTIME_VM_CONSTANTS_MIPS_H_
-#define RUNTIME_VM_CONSTANTS_MIPS_H_
-
-#include "platform/assert.h"
-
-namespace dart {
-
-enum Register {
- R0 = 0,
- R1 = 1, // AT aka TMP
- R2 = 2,
- R3 = 3,
- R4 = 4,
- R5 = 5,
- R6 = 6,
- R7 = 7,
- R8 = 8,
- R9 = 9,
- R10 = 10,
- R11 = 11,
- R12 = 12,
- R13 = 13,
- R14 = 14,
- R15 = 15,
- R16 = 16,
- R17 = 17,
- R18 = 18,
- R19 = 19, // THR
- R20 = 20,
- R21 = 21,
- R22 = 22, // CTX
- R23 = 23, // PP
- R24 = 24,
- R25 = 25,
- R26 = 26,
- R27 = 27,
- R28 = 28,
- R29 = 29, // SP
- R30 = 30, // FP
- R31 = 31, // RA
- kNumberOfCpuRegisters = 32,
- IMM = 32, // Positive value is easier to encode than kNoRegister in bitfield.
- kNoRegister = -1, // Signals an illegal register.
-
-
- // Register aliases.
- ZR = R0,
- AT = R1,
-
- V0 = R2,
- V1 = R3,
-
- A0 = R4,
- A1 = R5,
- A2 = R6,
- A3 = R7,
-
- T0 = R8,
- T1 = R9,
- T2 = R10,
- T3 = R11,
- T4 = R12,
- T5 = R13,
- T6 = R14,
- T7 = R15,
-
- S0 = R16,
- S1 = R17,
- S2 = R18,
- S3 = R19,
- S4 = R20,
- S5 = R21,
- S6 = R22,
- S7 = R23,
-
- T8 = R24,
- T9 = R25,
-
- K0 = R26,
- K1 = R27,
-
- GP = R28,
- SP = R29,
- FP = R30,
- RA = R31,
-};
-
-
-// Values for floating point registers.
-// Double-precision values use register pairs.
-enum FRegister {
- F0 = 0,
- F1 = 1,
- F2 = 2,
- F3 = 3,
- F4 = 4,
- F5 = 5,
- F6 = 6,
- F7 = 7,
- F8 = 8,
- F9 = 9,
- F10 = 10,
- F11 = 11,
- F12 = 12,
- F13 = 13,
- F14 = 14,
- F15 = 15,
- F16 = 16,
- F17 = 17,
- F18 = 18,
- F19 = 19,
- F20 = 20,
- F21 = 21,
- F22 = 22,
- F23 = 23,
- F24 = 24,
- F25 = 25,
- F26 = 26,
- F27 = 27,
- F28 = 28,
- F29 = 29,
- F30 = 30,
- F31 = 31,
- kNumberOfFRegisters = 32,
- kNoFRegister = -1,
-};
-
-// The double precision floating point registers are concatenated pairs of the
-// single precision registers, e.g. D0 is F1:F0, D1 is F3:F2, etc.. We only
-// tell the architecture generic code about the double precision registers, then
-// convert to the single precision registers when needed in the mips-specific
-// code.
-enum DRegister {
- D0 = 0, // Function return value 1.
- D1 = 1, // Function return value 2.
- D2 = 2, // Not preserved.
- D3 = 3, // Not preserved.
- D4 = 4, // Not preserved.
- D5 = 5, // Not preserved.
- D6 = 6, // Argument 1.
- D7 = 7, // Argument 2.
- D8 = 8, // Not preserved.
- D9 = 9, // Not preserved.
- D10 = 10, // Preserved.
- D11 = 11, // Preserved.
- D12 = 12, // Preserved.
- D13 = 13, // Preserved.
- D14 = 14, // Preserved.
- D15 = 15, // Preserved.
- kNumberOfDRegisters = 16,
- kNoDRegister = -1,
-};
-
-static inline FRegister EvenFRegisterOf(DRegister d) {
- return static_cast<FRegister>(d * 2);
-}
-
-static inline FRegister OddFRegisterOf(DRegister d) {
- return static_cast<FRegister>((d * 2) + 1);
-}
-
-const DRegister DTMP = D9;
-const FRegister STMP1 = F18;
-const FRegister STMP2 = F19;
-
-// Architecture independent aliases.
-typedef DRegister FpuRegister;
-const FpuRegister FpuTMP = DTMP;
-const int kNumberOfFpuRegisters = kNumberOfDRegisters;
-const FpuRegister kNoFpuRegister = kNoDRegister;
-
-
-// Register aliases.
-const Register TMP = AT; // Used as scratch register by assembler.
-const Register TMP2 = kNoRegister; // No second assembler scratch register.
-const Register CTX = S6; // Location of current context at method entry.
-const Register CODE_REG = S6;
-const Register PP = S7; // Caches object pool pointer in generated code.
-const Register SPREG = SP; // Stack pointer register.
-const Register FPREG = FP; // Frame pointer register.
-const Register LRREG = RA; // Link register.
-const Register ICREG = S5; // IC data register.
-const Register ARGS_DESC_REG = S4;
-const Register THR = S3; // Caches current thread in generated code.
-const Register CALLEE_SAVED_TEMP = S5;
-
-// The code that generates a comparison can be far away from the code that
-// generates the branch that uses the result of that comparison. In this case,
-// CMPRES1 and CMPRES2 are used for the results of the comparison. We need two
-// since TMP is clobbered by a far branch.
-const Register CMPRES1 = T8;
-const Register CMPRES2 = T9;
-
-// Exception object is passed in this register to the catch handlers when an
-// exception is thrown.
-const Register kExceptionObjectReg = V0;
-
-// Stack trace object is passed in this register to the catch handlers when
-// an exception is thrown.
-const Register kStackTraceObjectReg = V1;
-
-
-typedef uint32_t RegList;
-const RegList kAllCpuRegistersList = 0xFFFFFFFF;
-
-const RegList kAbiArgumentCpuRegs =
- (1 << A0) | (1 << A1) | (1 << A2) | (1 << A3);
-const RegList kAbiPreservedCpuRegs = (1 << S0) | (1 << S1) | (1 << S2) |
- (1 << S3) | (1 << S4) | (1 << S5) |
- (1 << S6) | (1 << S7);
-const int kAbiPreservedCpuRegCount = 8;
-
-// FPU registers 20 - 31 are preserved across calls.
-const FRegister kAbiFirstPreservedFpuReg = F20;
-const FRegister kAbiLastPreservedFpuReg =
- static_cast<FRegister>(kNumberOfFRegisters - 1);
-const int kAbiPreservedFpuRegCount = 12;
-
-const RegList kReservedCpuRegisters =
- (1 << SPREG) | (1 << FPREG) | (1 << TMP) | (1 << PP) | (1 << THR) |
- (1 << CTX) | (1 << ZR) | (1 << CMPRES1) | (1 << CMPRES2) | (1 << K0) |
- (1 << K1) | (1 << GP) | (1 << RA);
-// CPU registers available to Dart allocator.
-const RegList kDartAvailableCpuRegs =
- kAllCpuRegistersList & ~kReservedCpuRegisters;
-// Registers available to Dart that are not preserved by runtime calls.
-const RegList kDartVolatileCpuRegs =
- kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
-const int kDartVolatileCpuRegCount = 14;
-const Register kDartFirstVolatileCpuReg = R2;
-const Register kDartLastVolatileCpuReg = R15;
-
-// FPU registers 0 - 19 are not preserved across calls.
-const FRegister kDartFirstVolatileFpuReg = F0;
-const FRegister kDartLastVolatileFpuReg = F19;
-const int kDartVolatileFpuRegCount = 20;
-
-
-// There is no status register on MIPS. Instead of representing a condition
-// code, type Condition (see assembler_mips.h) represents a pair of operands and
-// a relation operator between them.
-enum RelationOperator {
- AL, // always
- NV, // never
- EQ, // equal
- NE, // not equal
- GT, // greater than
- GE, // greater equal
- LT, // less than
- LE, // less equal
- UGT, // unsigned greater than
- UGE, // unsigned greater equal
- ULT, // unsigned less than
- ULE, // unsigned less equal
- INVALID_RELATION
-};
-
-
-// Constants used for the decoding or encoding of the individual fields of
-// instructions. Based on the "Table 4.25 CPU Instruction Format Fields".
-enum InstructionFields {
- kOpcodeShift = 26,
- kOpcodeBits = 6,
- kRsShift = 21,
- kRsBits = 5,
- kFmtShift = 21,
- kFmtBits = 5,
- kRtShift = 16,
- kRtBits = 5,
- kFtShift = 16,
- kFtBits = 5,
- kRdShift = 11,
- kRdBits = 5,
- kFsShift = 11,
- kFsBits = 5,
- kSaShift = 6,
- kSaBits = 5,
- kFdShift = 6,
- kFdBits = 5,
- kFunctionShift = 0,
- kFunctionBits = 6,
- kCop1FnShift = 0,
- kCop1FnBits = 6,
- kCop1SubShift = 21,
- kCop1SubBits = 5,
- kImmShift = 0,
- kImmBits = 16,
- kInstrShift = 0,
- kInstrBits = 26,
- kBreakCodeShift = 6,
- kBreakCodeBits = 20,
- kFpuCCShift = 8,
- kFpuCCBits = 3,
-
- kBranchOffsetMask = 0x0000ffff,
-};
-
-
-enum Opcode {
- SPECIAL = 0,
- REGIMM = 1,
- J = 2,
- JAL = 3,
- BEQ = 4,
- BNE = 5,
- BLEZ = 6,
- BGTZ = 7,
- ADDI = 8,
- ADDIU = 9,
- SLTI = 10,
- SLTIU = 11,
- ANDI = 12,
- ORI = 13,
- XORI = 14,
- LUI = 15,
- CPO0 = 16,
- COP1 = 17,
- COP2 = 18,
- COP1X = 19,
- BEQL = 20,
- BNEL = 21,
- BLEZL = 22,
- BGTZL = 23,
- SPECIAL2 = 28,
- JALX = 29,
- SPECIAL3 = 31,
- LB = 32,
- LH = 33,
- LWL = 34,
- LW = 35,
- LBU = 36,
- LHU = 37,
- LWR = 38,
- SB = 40,
- SH = 41,
- SWL = 42,
- SW = 43,
- SWR = 46,
- CACHE = 47,
- LL = 48,
- LWC1 = 49,
- LWC2 = 50,
- PREF = 51,
- LDC1 = 53,
- LDC2 = 54,
- SC = 56,
- SWC1 = 57,
- SWC2 = 58,
- SDC1 = 61,
- SDC2 = 62,
-};
-
-
-enum SpecialFunction {
- // SPECIAL opcodes.
- SLL = 0,
- MOVCI = 1,
- SRL = 2,
- SRA = 3,
- SLLV = 4,
- SRLV = 6,
- SRAV = 7,
- JR = 8,
- JALR = 9,
- MOVZ = 10,
- MOVN = 11,
- SYSCALL = 12,
- BREAK = 13,
- SYNC = 15,
- MFHI = 16,
- MTHI = 17,
- MFLO = 18,
- MTLO = 19,
- MULT = 24,
- MULTU = 25,
- DIV = 26,
- DIVU = 27,
- ADD = 32,
- ADDU = 33,
- SUB = 34,
- SUBU = 35,
- AND = 36,
- OR = 37,
- XOR = 38,
- NOR = 39,
- SLT = 42,
- SLTU = 43,
- TGE = 48,
- TGEU = 49,
- TLT = 50,
- TLTU = 51,
- TEQ = 52,
- TNE = 54,
-
- // SPECIAL2 opcodes.
- MADD = 0,
- MADDU = 1,
- CLZ = 32,
- CLO = 33,
-};
-
-
-enum RtRegImm {
- BLTZ = 0,
- BGEZ = 1,
- BLTZL = 2,
- BGEZL = 3,
- TGEI = 8,
- TGEIU = 9,
- TLTI = 10,
- TLTIU = 11,
- TEQI = 12,
- TNEI = 14,
- BLTZAL = 16,
- BGEZAL = 17,
- BLTZALL = 18,
- BGEZALL = 19,
- SYNCI = 31,
-};
-
-
-enum Cop1Function {
- COP1_ADD = 0x00,
- COP1_SUB = 0x01,
- COP1_MUL = 0x02,
- COP1_DIV = 0x03,
- COP1_SQRT = 0x04,
- COP1_MOV = 0x06,
- COP1_NEG = 0x07,
- COP1_TRUNC_W = 0x0d,
- COP1_CVT_S = 0x20,
- COP1_CVT_D = 0x21,
- COP1_C_F = 0x30,
- COP1_C_UN = 0x31,
- COP1_C_EQ = 0x32,
- COP1_C_UEQ = 0x33,
- COP1_C_OLT = 0x34,
- COP1_C_ULT = 0x35,
- COP1_C_OLE = 0x36,
- COP1_C_ULE = 0x37,
-};
-
-
-enum Cop1Sub {
- COP1_MF = 0,
- COP1_MT = 4,
- COP1_BC = 8,
-};
-
-
-enum Format {
- FMT_S = 16,
- FMT_D = 17,
- FMT_W = 20,
- FMT_L = 21,
- FMT_PS = 22,
-};
-
-
-class Instr {
- public:
- enum {
- kInstrSize = 4,
- };
-
- static const int32_t kNopInstruction = 0;
-
- // Reserved break instruction codes.
- static const int32_t kBreakPointCode = 0xdeb0; // For breakpoint.
- static const int32_t kStopMessageCode = 0xdeb1; // For Stop(message).
- static const int32_t kSimulatorBreakCode = 0xdeb2; // For breakpoint in sim.
- static const int32_t kSimulatorRedirectCode = 0xca11; // For redirection.
-
- static const int32_t kBreakPointZeroInstruction =
- (SPECIAL << kOpcodeShift) | (BREAK << kFunctionShift);
-
- // Breakpoint instruction filling assembler code buffers in debug mode.
- static const int32_t kBreakPointInstruction =
- kBreakPointZeroInstruction | (kBreakPointCode << kBreakCodeShift);
-
- // Breakpoint instruction used by the simulator.
- // Should be distinct from kBreakPointInstruction and from a typical user
- // breakpoint inserted in generated code for debugging, e.g. break_(0).
- static const int32_t kSimulatorBreakpointInstruction =
- kBreakPointZeroInstruction | (kSimulatorBreakCode << kBreakCodeShift);
-
- // Runtime call redirection instruction used by the simulator.
- static const int32_t kSimulatorRedirectInstruction =
- kBreakPointZeroInstruction | (kSimulatorRedirectCode << kBreakCodeShift);
-
- // Get the raw instruction bits.
- inline int32_t InstructionBits() const {
- return *reinterpret_cast<const int32_t*>(this);
- }
-
- // Set the raw instruction bits to value.
- inline void SetInstructionBits(int32_t value) {
- *reinterpret_cast<int32_t*>(this) = value;
- }
-
- inline void SetImmInstrBits(Opcode op,
- Register rs,
- Register rt,
- uint16_t imm) {
- SetInstructionBits(op << kOpcodeShift | rs << kRsShift | rt << kRtShift |
- imm << kImmShift);
- }
-
- inline void SetSpecialInstrBits(SpecialFunction f,
- Register rs,
- Register rt,
- Register rd) {
- SetInstructionBits(SPECIAL << kOpcodeShift | f << kFunctionShift |
- rs << kRsShift | rt << kRtShift | rd << kRdShift);
- }
-
- // Read one particular bit out of the instruction bits.
- inline int32_t Bit(int nr) const { return (InstructionBits() >> nr) & 1; }
-
- // Read a bit field out of the instruction bits.
- inline int32_t Bits(int shift, int count) const {
- return (InstructionBits() >> shift) & ((1 << count) - 1);
- }
-
- // Accessors to the different named fields used in the MIPS encoding.
- inline Opcode OpcodeField() const {
- return static_cast<Opcode>(Bits(kOpcodeShift, kOpcodeBits));
- }
-
- inline void SetOpcodeField(Opcode b) {
- int32_t instr = InstructionBits();
- int32_t mask = ((1 << kOpcodeBits) - 1) << kOpcodeShift;
- SetInstructionBits((b << kOpcodeShift) | (instr & ~mask));
- }
-
- inline Register RsField() const {
- return static_cast<Register>(Bits(kRsShift, kRsBits));
- }
-
- inline Register RtField() const {
- return static_cast<Register>(Bits(kRtShift, kRtBits));
- }
-
- inline Register RdField() const {
- return static_cast<Register>(Bits(kRdShift, kRdBits));
- }
-
- inline FRegister FsField() const {
- return static_cast<FRegister>(Bits(kFsShift, kFsBits));
- }
-
- inline FRegister FtField() const {
- return static_cast<FRegister>(Bits(kFtShift, kFtBits));
- }
-
- inline FRegister FdField() const {
- return static_cast<FRegister>(Bits(kFdShift, kFdBits));
- }
-
- inline int SaField() const { return Bits(kSaShift, kSaBits); }
-
- inline int32_t UImmField() const { return Bits(kImmShift, kImmBits); }
-
- inline int32_t SImmField() const {
- // Sign-extend the imm field.
- return (Bits(kImmShift, kImmBits) << (32 - kImmBits)) >> (32 - kImmBits);
- }
-
- inline int32_t BreakCodeField() const {
- return Bits(kBreakCodeShift, kBreakCodeBits);
- }
-
- inline SpecialFunction FunctionField() const {
- return static_cast<SpecialFunction>(Bits(kFunctionShift, kFunctionBits));
- }
-
- inline RtRegImm RegImmFnField() const {
- return static_cast<RtRegImm>(Bits(kRtShift, kRtBits));
- }
-
- inline void SetRegImmFnField(RtRegImm b) {
- int32_t instr = InstructionBits();
- int32_t mask = ((1 << kRtBits) - 1) << kRtShift;
- SetInstructionBits((b << kRtShift) | (instr & ~mask));
- }
-
- inline bool IsBreakPoint() {
- return (OpcodeField() == SPECIAL) && (FunctionField() == BREAK);
- }
-
- inline Cop1Function Cop1FunctionField() const {
- return static_cast<Cop1Function>(Bits(kCop1FnShift, kCop1FnBits));
- }
-
- inline Cop1Sub Cop1SubField() const {
- return static_cast<Cop1Sub>(Bits(kCop1SubShift, kCop1SubBits));
- }
-
- inline bool HasFormat() const {
- return (OpcodeField() == COP1) && (Bit(25) == 1);
- }
-
- inline Format FormatField() const {
- return static_cast<Format>(Bits(kFmtShift, kFmtBits));
- }
-
- inline int32_t FpuCCField() const { return Bits(kFpuCCShift, kFpuCCBits); }
-
- // Instructions are read out of a code stream. The only way to get a
- // reference to an instruction is to convert a pc. 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(uword pc) { return reinterpret_cast<Instr*>(pc); }
-
-#if defined(DEBUG)
- inline void AssertIsImmInstr(Opcode op,
- Register rs,
- Register rt,
- int32_t imm) {
- ASSERT((OpcodeField() == op) && (RsField() == rs) && (RtField() == rt) &&
- (SImmField() == imm));
- }
-
- inline void AssertIsSpecialInstr(SpecialFunction f,
- Register rs,
- Register rt,
- Register rd) {
- ASSERT((OpcodeField() == SPECIAL) && (FunctionField() == f) &&
- (RsField() == rs) && (RtField() == rt) && (RdField() == rd));
- }
-#endif // defined(DEBUG)
-
- private:
- DISALLOW_ALLOCATION();
- DISALLOW_IMPLICIT_CONSTRUCTORS(Instr);
-};
-
-} // namespace dart
-
-#endif // RUNTIME_VM_CONSTANTS_MIPS_H_
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/cpu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698