From c211591e17b89f190daaebacdfd954eb107ec01a Mon Sep 17 00:00:00 2001 From: Vladimir Medic Date: Mon, 26 Jan 2015 10:33:43 +0000 Subject: [PATCH] When disassembler meets compact jump instructions for r6 it crashes as the access to operands array is out of range. This patch removes dedicated decoder method that wrongly handles decoding of these instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227084 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Mips/Mips32r6InstrInfo.td | 1 - test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt | 2 ++ test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt | 3 +++ test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt | 2 -- test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt | 3 +++ test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt | 3 +++ test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt | 2 -- 7 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/Target/Mips/Mips32r6InstrInfo.td b/lib/Target/Mips/Mips32r6InstrInfo.td index baf746061be..2175160a45a 100644 --- a/lib/Target/Mips/Mips32r6InstrInfo.td +++ b/lib/Target/Mips/Mips32r6InstrInfo.td @@ -379,7 +379,6 @@ class JMP_IDX_COMPACT_DESC_BASE Pattern = []; bit isTerminator = 1; bit hasDelaySlot = 0; - string DecoderMethod = "DecodeSimm16"; } class JIALC_DESC : JMP_IDX_COMPACT_DESC_BASE<"jialc", calloffset16, diff --git a/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt b/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt index ce6dd40b72f..85d1a0eff4e 100644 --- a/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt +++ b/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt @@ -142,3 +142,5 @@ 0xb7 0x34 0x52 0x49 # CHECK: lwc2 $18, -841($6) 0x75 0x92 0xf4 0x49 # CHECK: sdc2 $20, 629($18) 0x30 0x81 0x79 0x49 # CHECK: swc2 $25, 304($16) +0x00 0x01 0x05 0xf8 # CHECK: jialc $5, 256 +0x00 0x01 0x05 0xd8 # CHECK: jic $5, 256 diff --git a/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt b/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt index 4781d0c4db8..3c4d1e22e8c 100644 --- a/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt +++ b/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt @@ -142,3 +142,6 @@ 0x49 0x52 0x34 0xb7 # CHECK: lwc2 $18, -841($6) 0x49 0xf4 0x92 0x75 # CHECK: sdc2 $20, 629($18) 0x49 0x79 0x81 0x30 # CHECK: swc2 $25, 304($16) +0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 +0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 + diff --git a/test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt b/test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt index f6c512104b7..dc29c0c1768 100644 --- a/test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt +++ b/test/MC/Disassembler/Mips/mips32r6/valid-xfail-mips32r6.txt @@ -14,6 +14,4 @@ 0x60 0xa0 0x00 0x40 # CHECK: bnec $5, $zero, 256 0x60 0xa6 0x00 0x40 # CHECK: bnec $5, $6, 256 0x7c 0xa1 0x04 0x25 # CHECK: cache 1, 8($5) -0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 -0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 0x7c 0xa1 0x04 0x35 # CHECK: pref 1, 8($5) diff --git a/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt b/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt index 77e232aea95..0d83a347a1f 100644 --- a/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt +++ b/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt @@ -160,3 +160,6 @@ 0xb7 0x34 0x52 0x49 # CHECK: lwc2 $18, -841($6) 0x75 0x92 0xf4 0x49 # CHECK: sdc2 $20, 629($18) 0x30 0x81 0x79 0x49 # CHECK: swc2 $25, 304($16) +0x00 0x01 0x05 0xf8 # CHECK: jialc $5, 256 +0x00 0x01 0x05 0xd8 # CHECK: jic $5, 256 + diff --git a/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt b/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt index 66baf5f2f1c..f4ce8f7ae54 100644 --- a/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt +++ b/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt @@ -160,3 +160,6 @@ 0x49 0x52 0x34 0xb7 # CHECK: lwc2 $18, -841($6) 0x49 0xf4 0x92 0x75 # CHECK: sdc2 $20, 629($18) 0x49 0x79 0x81 0x30 # CHECK: swc2 $25, 304($16) +0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 +0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 + diff --git a/test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt b/test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt index 1e9d0a62d93..fe38c1fb35f 100644 --- a/test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt +++ b/test/MC/Disassembler/Mips/mips64r6/valid-xfail-mips64r6.txt @@ -14,8 +14,6 @@ 0x60 0xa0 0x00 0x40 # CHECK: bnec $5, $zero, 256 0x60 0xa6 0x00 0x40 # CHECK: bnec $5, $6, 256 0x7c 0xa1 0x04 0x25 # CHECK: cache 1, 8($5) -0xf8 0x05 0x01 0x00 # CHECK: jialc $5, 256 -0xd8 0x05 0x01 0x00 # CHECK: jic $5, 256 0x7c 0xa1 0x04 0x35 # CHECK: pref 1, 8($5) 0x64 0x58 0x46 0x9f # CHECK: daddiu $24, $2, 18079 0x66 0x73 0x69 0x3f # CHECK: daddiu $19, $19, 26943