| Index: src/mips64/constants-mips64.cc
|
| diff --git a/src/mips64/constants-mips64.cc b/src/mips64/constants-mips64.cc
|
| index 5ebadb338af47984f6c303539a65e0e2384c9eac..fd183a7b018abddaa9a4c31c321ae876c59d7593 100644
|
| --- a/src/mips64/constants-mips64.cc
|
| +++ b/src/mips64/constants-mips64.cc
|
| @@ -141,6 +141,8 @@ bool Instruction::IsForbiddenInBranchDelay() const {
|
| case BNEL:
|
| case BLEZL:
|
| case BGTZL:
|
| + case BC:
|
| + case BALC:
|
| return true;
|
| case REGIMM:
|
| switch (RtFieldRaw()) {
|
| @@ -173,6 +175,11 @@ bool Instruction::IsLinkingInstruction() const {
|
| switch (op) {
|
| case JAL:
|
| return true;
|
| + case POP76:
|
| + if (RsFieldRawNoAssert() == JIALC)
|
| + return true; // JIALC
|
| + else
|
| + return false; // BNEZC
|
| case REGIMM:
|
| switch (RtFieldRaw()) {
|
| case BGEZAL:
|
| @@ -290,9 +297,43 @@ Instruction::Type Instruction::InstructionType() const {
|
| case INS:
|
| case EXT:
|
| case DEXT:
|
| - case BITSWAP:
|
| - case DBITSWAP:
|
| return kRegisterType;
|
| + case BSHFL: {
|
| + int sa = SaFieldRaw() >> kSaShift;
|
| + switch (sa) {
|
| + case BITSWAP:
|
| + return kRegisterType;
|
| + case WSBH:
|
| + case SEB:
|
| + case SEH:
|
| + return kUnsupported;
|
| + }
|
| + sa >>= kBp2Bits;
|
| + switch (sa) {
|
| + case ALIGN:
|
| + return kRegisterType;
|
| + default:
|
| + return kUnsupported;
|
| + }
|
| + }
|
| + case DBSHFL: {
|
| + int sa = SaFieldRaw() >> kSaShift;
|
| + switch (sa) {
|
| + case DBITSWAP:
|
| + return kRegisterType;
|
| + case DSBH:
|
| + case DSHD:
|
| + return kUnsupported;
|
| + }
|
| + sa = SaFieldRaw() >> kSaShift;
|
| + sa >>= kBp3Bits;
|
| + switch (sa) {
|
| + case DALIGN:
|
| + return kRegisterType;
|
| + default:
|
| + return kUnsupported;
|
| + }
|
| + }
|
| default:
|
| return kUnsupported;
|
| }
|
| @@ -329,8 +370,8 @@ Instruction::Type Instruction::InstructionType() const {
|
| case BNEL:
|
| case BLEZL:
|
| case BGTZL:
|
| - case BEQZC:
|
| - case BNEZC:
|
| + case POP66:
|
| + case POP76:
|
| case LB:
|
| case LH:
|
| case LWL:
|
| @@ -350,6 +391,9 @@ Instruction::Type Instruction::InstructionType() const {
|
| case LDC1:
|
| case SWC1:
|
| case SDC1:
|
| + case PCREL:
|
| + case BC:
|
| + case BALC:
|
| return kImmediateType;
|
| // 26 bits immediate type instructions. e.g.: j imm26.
|
| case J:
|
|
|