1 /* 2 * Copyright (C) 2016 Imagination Technologies 3 * Author: Marcin Nowakowski <marcin.nowakowski@mips.com> 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License as published by the 7 * Free Software Foundation; either version 2 of the License, or (at your 8 * option) any later version. 9 */ 10 11 #ifndef __PROBES_COMMON_H 12 #define __PROBES_COMMON_H 13 14 #include <asm/inst.h> 15 16 int __insn_is_compact_branch(union mips_instruction insn); 17 18 static inline int __insn_has_delay_slot(const union mips_instruction insn) 19 { 20 switch (insn.i_format.opcode) { 21 /* 22 * jr and jalr are in r_format format. 23 */ 24 case spec_op: 25 switch (insn.r_format.func) { 26 case jalr_op: 27 case jr_op: 28 return 1; 29 } 30 break; 31 32 /* 33 * This group contains: 34 * bltz_op, bgez_op, bltzl_op, bgezl_op, 35 * bltzal_op, bgezal_op, bltzall_op, bgezall_op. 36 */ 37 case bcond_op: 38 switch (insn.i_format.rt) { 39 case bltz_op: 40 case bltzl_op: 41 case bgez_op: 42 case bgezl_op: 43 case bltzal_op: 44 case bltzall_op: 45 case bgezal_op: 46 case bgezall_op: 47 case bposge32_op: 48 return 1; 49 } 50 break; 51 52 /* 53 * These are unconditional and in j_format. 54 */ 55 case jal_op: 56 case j_op: 57 case beq_op: 58 case beql_op: 59 case bne_op: 60 case bnel_op: 61 case blez_op: /* not really i_format */ 62 case blezl_op: 63 case bgtz_op: 64 case bgtzl_op: 65 return 1; 66 67 /* 68 * And now the FPA/cp1 branch instructions. 69 */ 70 case cop1_op: 71 #ifdef CONFIG_CPU_CAVIUM_OCTEON 72 case lwc2_op: /* This is bbit0 on Octeon */ 73 case ldc2_op: /* This is bbit032 on Octeon */ 74 case swc2_op: /* This is bbit1 on Octeon */ 75 case sdc2_op: /* This is bbit132 on Octeon */ 76 #endif 77 return 1; 78 } 79 80 return 0; 81 } 82 83 #endif /* __PROBES_COMMON_H */ 84