| Index: src/mips64/constants-mips64.h
 | 
| diff --git a/src/mips64/constants-mips64.h b/src/mips64/constants-mips64.h
 | 
| index a0104da66ed9ffa3b916ee2a978c6bd6055a04e6..0284478c08ed64f4b20ae4b18eb20c1f1b9347b1 100644
 | 
| --- a/src/mips64/constants-mips64.h
 | 
| +++ b/src/mips64/constants-mips64.h
 | 
| @@ -221,9 +221,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 +264,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 +287,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 +457,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.
 | 
| +  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 +611,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 +936,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 +989,6 @@ class Instruction {
 | 
|    }
 | 
|  
 | 
|    inline int SaFieldRaw() const {
 | 
| -    DCHECK(InstructionType() == kRegisterType);
 | 
|      return InstructionBits() & kSaFieldMask;
 | 
|    }
 | 
|  
 | 
| @@ -970,13 +1017,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 int64_t Imm26Value() const {
 | 
| -    DCHECK(InstructionType() == kJumpType);
 | 
| +  inline int32_t Imm26Value() const {
 | 
| +    DCHECK((InstructionType() == kJumpType) ||
 | 
| +           (InstructionType() == kImmediateType));
 | 
|      return Bits(kImm26Shift + kImm26Bits - 1, kImm26Shift);
 | 
|    }
 | 
|  
 | 
| 
 |