| Index: src/mips64/constants-mips64.h
|
| diff --git a/src/mips64/constants-mips64.h b/src/mips64/constants-mips64.h
|
| index cc41265497c1cb3d3b1bd707135d827df016dca8..7c2864a31f35391e2f05a013c32d0f90493eba64 100644
|
| --- a/src/mips64/constants-mips64.h
|
| +++ b/src/mips64/constants-mips64.h
|
| @@ -204,6 +204,12 @@ enum SoftwareInterruptCodes {
|
| // debugger.
|
| const uint32_t kMaxWatchpointCode = 31;
|
| const uint32_t kMaxStopCode = 127;
|
| +const int32_t kMaxInt18 = 131071;
|
| +const int32_t kMinInt18 = -131072;
|
| +const int32_t kMaxInt19 = 262143;
|
| +const int32_t kMinInt19 = -262144;
|
| +const int32_t kMaxInt26 = 33554431;
|
| +const int32_t kMinInt26 = -33554432;
|
| STATIC_ASSERT(kMaxWatchpointCode < kMaxStopCode);
|
|
|
|
|
| @@ -221,9 +227,17 @@ const int kSaBits = 5;
|
| const int kFunctionShift = 0;
|
| const int kFunctionBits = 6;
|
| const int kLuiShift = 16;
|
| +const int kBp2Shift = 6;
|
| +const int kBp2Bits = 2;
|
| +const int kBp3Shift = 6;
|
| +const int kBp3Bits = 3;
|
|
|
| const int kImm16Shift = 0;
|
| const int kImm16Bits = 16;
|
| +const int kImm18Shift = 0;
|
| +const int kImm18Bits = 18;
|
| +const int kImm19Shift = 0;
|
| +const int kImm19Bits = 19;
|
| const int kImm21Shift = 0;
|
| const int kImm21Bits = 21;
|
| const int kImm26Shift = 0;
|
| @@ -256,6 +270,9 @@ const int kFBtrueBits = 1;
|
| // Instruction bit masks.
|
| const int kOpcodeMask = ((1 << kOpcodeBits) - 1) << kOpcodeShift;
|
| const int kImm16Mask = ((1 << kImm16Bits) - 1) << kImm16Shift;
|
| +const int kImm18Mask = ((1 << kImm18Bits) - 1) << kImm18Shift;
|
| +const int kImm19Mask = ((1 << kImm19Bits) - 1) << kImm19Shift;
|
| +const int kImm21Mask = ((1 << kImm21Bits) - 1) << kImm21Shift;
|
| const int kImm26Mask = ((1 << kImm26Bits) - 1) << kImm26Shift;
|
| const int kImm28Mask = ((1 << kImm28Bits) - 1) << kImm28Shift;
|
| const int kRsFieldMask = ((1 << kRsBits) - 1) << kRsShift;
|
| @@ -276,72 +293,75 @@ const int64_t kTh16MaskOf64 = (int64_t)0xffff << 16;
|
| // We use this presentation to stay close to the table representation in
|
| // MIPS32 Architecture For Programmers, Volume II: The MIPS32 Instruction Set.
|
| enum Opcode {
|
| - SPECIAL = 0 << kOpcodeShift,
|
| - REGIMM = 1 << kOpcodeShift,
|
| -
|
| - J = ((0 << 3) + 2) << kOpcodeShift,
|
| - JAL = ((0 << 3) + 3) << kOpcodeShift,
|
| - BEQ = ((0 << 3) + 4) << kOpcodeShift,
|
| - BNE = ((0 << 3) + 5) << kOpcodeShift,
|
| - BLEZ = ((0 << 3) + 6) << kOpcodeShift,
|
| - BGTZ = ((0 << 3) + 7) << kOpcodeShift,
|
| -
|
| - ADDI = ((1 << 3) + 0) << kOpcodeShift,
|
| - ADDIU = ((1 << 3) + 1) << kOpcodeShift,
|
| - SLTI = ((1 << 3) + 2) << kOpcodeShift,
|
| - SLTIU = ((1 << 3) + 3) << kOpcodeShift,
|
| - ANDI = ((1 << 3) + 4) << kOpcodeShift,
|
| - ORI = ((1 << 3) + 5) << kOpcodeShift,
|
| - XORI = ((1 << 3) + 6) << kOpcodeShift,
|
| - LUI = ((1 << 3) + 7) << kOpcodeShift, // LUI/AUI family.
|
| - DAUI = ((3 << 3) + 5) << kOpcodeShift,
|
| -
|
| - BEQC = ((2 << 3) + 0) << kOpcodeShift,
|
| - COP1 = ((2 << 3) + 1) << kOpcodeShift, // Coprocessor 1 class.
|
| - BEQL = ((2 << 3) + 4) << kOpcodeShift,
|
| - BNEL = ((2 << 3) + 5) << kOpcodeShift,
|
| - BLEZL = ((2 << 3) + 6) << kOpcodeShift,
|
| - BGTZL = ((2 << 3) + 7) << kOpcodeShift,
|
| -
|
| - DADDI = ((3 << 3) + 0) << kOpcodeShift, // This is also BNEC.
|
| - DADDIU = ((3 << 3) + 1) << kOpcodeShift,
|
| - LDL = ((3 << 3) + 2) << kOpcodeShift,
|
| - LDR = ((3 << 3) + 3) << kOpcodeShift,
|
| - SPECIAL2 = ((3 << 3) + 4) << kOpcodeShift,
|
| - SPECIAL3 = ((3 << 3) + 7) << kOpcodeShift,
|
| -
|
| - LB = ((4 << 3) + 0) << kOpcodeShift,
|
| - LH = ((4 << 3) + 1) << kOpcodeShift,
|
| - LWL = ((4 << 3) + 2) << kOpcodeShift,
|
| - LW = ((4 << 3) + 3) << kOpcodeShift,
|
| - LBU = ((4 << 3) + 4) << kOpcodeShift,
|
| - LHU = ((4 << 3) + 5) << kOpcodeShift,
|
| - LWR = ((4 << 3) + 6) << kOpcodeShift,
|
| - LWU = ((4 << 3) + 7) << kOpcodeShift,
|
| -
|
| - SB = ((5 << 3) + 0) << kOpcodeShift,
|
| - SH = ((5 << 3) + 1) << kOpcodeShift,
|
| - SWL = ((5 << 3) + 2) << kOpcodeShift,
|
| - SW = ((5 << 3) + 3) << kOpcodeShift,
|
| - SDL = ((5 << 3) + 4) << kOpcodeShift,
|
| - SDR = ((5 << 3) + 5) << kOpcodeShift,
|
| - SWR = ((5 << 3) + 6) << kOpcodeShift,
|
| -
|
| - LWC1 = ((6 << 3) + 1) << kOpcodeShift,
|
| - LLD = ((6 << 3) + 4) << kOpcodeShift,
|
| - LDC1 = ((6 << 3) + 5) << kOpcodeShift,
|
| - BEQZC = ((6 << 3) + 6) << kOpcodeShift,
|
| - LD = ((6 << 3) + 7) << kOpcodeShift,
|
| -
|
| - PREF = ((6 << 3) + 3) << kOpcodeShift,
|
| -
|
| - SWC1 = ((7 << 3) + 1) << kOpcodeShift,
|
| - SCD = ((7 << 3) + 4) << kOpcodeShift,
|
| - SDC1 = ((7 << 3) + 5) << kOpcodeShift,
|
| - BNEZC = ((7 << 3) + 6) << kOpcodeShift,
|
| - SD = ((7 << 3) + 7) << kOpcodeShift,
|
| -
|
| - COP1X = ((1 << 4) + 3) << kOpcodeShift
|
| + SPECIAL = 0 << kOpcodeShift,
|
| + REGIMM = 1 << kOpcodeShift,
|
| +
|
| + J = ((0 << 3) + 2) << kOpcodeShift,
|
| + JAL = ((0 << 3) + 3) << kOpcodeShift,
|
| + BEQ = ((0 << 3) + 4) << kOpcodeShift,
|
| + BNE = ((0 << 3) + 5) << kOpcodeShift,
|
| + BLEZ = ((0 << 3) + 6) << kOpcodeShift,
|
| + BGTZ = ((0 << 3) + 7) << kOpcodeShift,
|
| +
|
| + ADDI = ((1 << 3) + 0) << kOpcodeShift,
|
| + ADDIU = ((1 << 3) + 1) << kOpcodeShift,
|
| + SLTI = ((1 << 3) + 2) << kOpcodeShift,
|
| + SLTIU = ((1 << 3) + 3) << kOpcodeShift,
|
| + ANDI = ((1 << 3) + 4) << kOpcodeShift,
|
| + ORI = ((1 << 3) + 5) << kOpcodeShift,
|
| + XORI = ((1 << 3) + 6) << kOpcodeShift,
|
| + LUI = ((1 << 3) + 7) << kOpcodeShift, // LUI/AUI family.
|
| + DAUI = ((3 << 3) + 5) << kOpcodeShift,
|
| +
|
| + BEQC = ((2 << 3) + 0) << kOpcodeShift,
|
| + COP1 = ((2 << 3) + 1) << kOpcodeShift, // Coprocessor 1 class.
|
| + BEQL = ((2 << 3) + 4) << kOpcodeShift,
|
| + BNEL = ((2 << 3) + 5) << kOpcodeShift,
|
| + BLEZL = ((2 << 3) + 6) << kOpcodeShift,
|
| + BGTZL = ((2 << 3) + 7) << kOpcodeShift,
|
| +
|
| + DADDI = ((3 << 3) + 0) << kOpcodeShift, // This is also BNEC.
|
| + DADDIU = ((3 << 3) + 1) << kOpcodeShift,
|
| + LDL = ((3 << 3) + 2) << kOpcodeShift,
|
| + LDR = ((3 << 3) + 3) << kOpcodeShift,
|
| + SPECIAL2 = ((3 << 3) + 4) << kOpcodeShift,
|
| + SPECIAL3 = ((3 << 3) + 7) << kOpcodeShift,
|
| +
|
| + LB = ((4 << 3) + 0) << kOpcodeShift,
|
| + LH = ((4 << 3) + 1) << kOpcodeShift,
|
| + LWL = ((4 << 3) + 2) << kOpcodeShift,
|
| + LW = ((4 << 3) + 3) << kOpcodeShift,
|
| + LBU = ((4 << 3) + 4) << kOpcodeShift,
|
| + LHU = ((4 << 3) + 5) << kOpcodeShift,
|
| + LWR = ((4 << 3) + 6) << kOpcodeShift,
|
| + LWU = ((4 << 3) + 7) << kOpcodeShift,
|
| +
|
| + SB = ((5 << 3) + 0) << kOpcodeShift,
|
| + SH = ((5 << 3) + 1) << kOpcodeShift,
|
| + SWL = ((5 << 3) + 2) << kOpcodeShift,
|
| + SW = ((5 << 3) + 3) << kOpcodeShift,
|
| + SDL = ((5 << 3) + 4) << kOpcodeShift,
|
| + SDR = ((5 << 3) + 5) << kOpcodeShift,
|
| + SWR = ((5 << 3) + 6) << kOpcodeShift,
|
| +
|
| + LWC1 = ((6 << 3) + 1) << kOpcodeShift,
|
| + BC = ((6 << 3) + 2) << kOpcodeShift,
|
| + LLD = ((6 << 3) + 4) << kOpcodeShift,
|
| + LDC1 = ((6 << 3) + 5) << kOpcodeShift,
|
| + POP66 = ((6 << 3) + 6) << kOpcodeShift,
|
| + LD = ((6 << 3) + 7) << kOpcodeShift,
|
| +
|
| + PREF = ((6 << 3) + 3) << kOpcodeShift,
|
| +
|
| + SWC1 = ((7 << 3) + 1) << kOpcodeShift,
|
| + BALC = ((7 << 3) + 2) << kOpcodeShift,
|
| + PCREL = ((7 << 3) + 3) << kOpcodeShift,
|
| + SCD = ((7 << 3) + 4) << kOpcodeShift,
|
| + SDC1 = ((7 << 3) + 5) << kOpcodeShift,
|
| + POP76 = ((7 << 3) + 6) << kOpcodeShift,
|
| + SD = ((7 << 3) + 7) << kOpcodeShift,
|
| +
|
| + COP1X = ((1 << 4) + 3) << kOpcodeShift
|
| };
|
|
|
| enum SecondaryField {
|
| @@ -443,12 +463,21 @@ enum SecondaryField {
|
| DINSU = ((0 << 3) + 6),
|
| DINS = ((0 << 3) + 7),
|
|
|
| - BITSWAP = ((4 << 3) + 0),
|
| - DBITSWAP = ((4 << 3) + 4),
|
| - DSBH = ((4 << 3) + 4),
|
| + BSHFL = ((4 << 3) + 0),
|
| + DBSHFL = ((4 << 3) + 4),
|
|
|
| - // SPECIAL3 Encoding of sa Field.
|
| + // SPECIAL3 Encoding of sa Field
|
| + BITSWAP = ((0 << 3) + 0),
|
| + ALIGN = ((0 << 3) + 2),
|
| + WSBH = ((0 << 3) + 2),
|
| + SEB = ((2 << 3) + 0),
|
| + SEH = ((3 << 3) + 0),
|
| +
|
| + DBITSWAP = ((0 << 3) + 0),
|
| + DALIGN = ((0 << 3) + 1),
|
| DBITSWAP_SA = ((0 << 3) + 0) << kSaShift,
|
| + DSBH = ((0 << 3) + 2),
|
| + DSHD = ((0 << 3) + 5),
|
|
|
| // REGIMM encoding of rt Field.
|
| BLTZ = ((0 << 3) + 0) << 16,
|
| @@ -588,6 +617,21 @@ enum SecondaryField {
|
| // COP1X Encoding of Function Field.
|
| MADD_D = ((4 << 3) + 1),
|
|
|
| + // PCREL Encoding of rt field
|
| + ADDIUPC = ((0 << 2) + 0),
|
| + LWPC = ((0 << 2) + 1),
|
| + LWUPC = ((0 << 2) + 2),
|
| + LDPC = ((0 << 3) + 6),
|
| + // reserved ((1 << 3) + 6),
|
| + AUIPC = ((3 << 3) + 6),
|
| + ALUIPC = ((3 << 3) + 7),
|
| +
|
| + // POP66 Encoding of rs field
|
| + JIC = ((0 << 5) + 0),
|
| +
|
| + // POP76 Encoding of rs field
|
| + JIALC = ((0 << 5) + 0),
|
| +
|
| NULLSF = 0
|
| };
|
|
|
| @@ -898,6 +942,16 @@ class Instruction {
|
| return Bits(kFrShift + kFrBits -1, kFrShift);
|
| }
|
|
|
| + inline int Bp2Value() const {
|
| + DCHECK(InstructionType() == kRegisterType);
|
| + return Bits(kBp2Shift + kBp2Bits - 1, kBp2Shift);
|
| + }
|
| +
|
| + inline int Bp3Value() const {
|
| + DCHECK(InstructionType() == kRegisterType);
|
| + return Bits(kBp3Shift + kBp3Bits - 1, kBp3Shift);
|
| + }
|
| +
|
| // Float Compare condition code instruction bits.
|
| inline int FCccValue() const {
|
| return Bits(kFCccShift + kFCccBits - 1, kFCccShift);
|
| @@ -941,7 +995,7 @@ class Instruction {
|
| }
|
|
|
| inline int SaFieldRaw() const {
|
| - DCHECK(InstructionType() == kRegisterType);
|
| + // DCHECK(InstructionType() == kRegisterType);
|
| return InstructionBits() & kSaFieldMask;
|
| }
|
|
|
| @@ -970,13 +1024,24 @@ class Instruction {
|
| return Bits(kImm16Shift + kImm16Bits - 1, kImm16Shift);
|
| }
|
|
|
| + inline int32_t Imm18Value() const {
|
| + DCHECK(InstructionType() == kImmediateType);
|
| + return Bits(kImm18Shift + kImm18Bits - 1, kImm18Shift);
|
| + }
|
| +
|
| + inline int32_t Imm19Value() const {
|
| + DCHECK(InstructionType() == kImmediateType);
|
| + return Bits(kImm19Shift + kImm19Bits - 1, kImm19Shift);
|
| + }
|
| +
|
| inline int32_t Imm21Value() const {
|
| DCHECK(InstructionType() == kImmediateType);
|
| return Bits(kImm21Shift + kImm21Bits - 1, kImm21Shift);
|
| }
|
|
|
| inline int32_t Imm26Value() const {
|
| - DCHECK(InstructionType() == kJumpType);
|
| + DCHECK((InstructionType() == kJumpType) ||
|
| + (InstructionType() == kImmediateType));
|
| return Bits(kImm26Shift + kImm26Bits - 1, kImm26Shift);
|
| }
|
|
|
|
|