summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Burton <paul.burton@imgtec.com>2017-03-12 08:12:09 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-12 08:12:09 +0000
commitdfba5f8f76c339c3c2ad115ac16f731b23465d35 (patch)
tree76fe1ad4c02547e651834b94139d3593576f3434
parent6e3b0aea46d3693aa0525fb4cd85d0dabcd6e1c9 (diff)
parentd75d675a05525cd31047d414434129c047ffa585 (diff)
MIPS: Fix is_jump_ins() handling of 16b microMIPS instructions
am: d75d675a05 Change-Id: I21332f13b7cb7a85cca19151ef909445879e2b44
-rw-r--r--arch/mips/kernel/process.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index 96ed8e7d4bac..2be2d94b6f2b 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -237,9 +237,14 @@ static inline int is_jump_ins(union mips_instruction *ip)
*
* microMIPS is kind of more fun...
*/
- if ((ip->mm16_r5_format.opcode == mm_pool16c_op &&
- (ip->mm16_r5_format.rt & mm_jr16_op) == mm_jr16_op) ||
- ip->j_format.opcode == mm_jal32_op)
+ if (mm_insn_16bit(ip->halfword[1])) {
+ if ((ip->mm16_r5_format.opcode == mm_pool16c_op &&
+ (ip->mm16_r5_format.rt & mm_jr16_op) == mm_jr16_op))
+ return 1;
+ return 0;
+ }
+
+ if (ip->j_format.opcode == mm_jal32_op)
return 1;
if (ip->r_format.opcode != mm_pool32a_op ||
ip->r_format.func != mm_pool32axf_op)