Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright (C) 2016 Imagination Technologies
0004  * Author: Marcin Nowakowski <marcin.nowakowski@mips.com>
0005  */
0006 
0007 #ifndef __PROBES_COMMON_H
0008 #define __PROBES_COMMON_H
0009 
0010 #include <asm/inst.h>
0011 
0012 int __insn_is_compact_branch(union mips_instruction insn);
0013 
0014 static inline int __insn_has_delay_slot(const union mips_instruction insn)
0015 {
0016     switch (insn.i_format.opcode) {
0017     /*
0018      * jr and jalr are in r_format format.
0019      */
0020     case spec_op:
0021         switch (insn.r_format.func) {
0022         case jalr_op:
0023         case jr_op:
0024             return 1;
0025         }
0026         break;
0027 
0028     /*
0029      * This group contains:
0030      * bltz_op, bgez_op, bltzl_op, bgezl_op,
0031      * bltzal_op, bgezal_op, bltzall_op, bgezall_op.
0032      */
0033     case bcond_op:
0034         switch (insn.i_format.rt) {
0035         case bltz_op:
0036         case bltzl_op:
0037         case bgez_op:
0038         case bgezl_op:
0039         case bltzal_op:
0040         case bltzall_op:
0041         case bgezal_op:
0042         case bgezall_op:
0043         case bposge32_op:
0044             return 1;
0045         }
0046         break;
0047 
0048     /*
0049      * These are unconditional and in j_format.
0050      */
0051     case jal_op:
0052     case j_op:
0053     case beq_op:
0054     case beql_op:
0055     case bne_op:
0056     case bnel_op:
0057     case blez_op: /* not really i_format */
0058     case blezl_op:
0059     case bgtz_op:
0060     case bgtzl_op:
0061         return 1;
0062 
0063     /*
0064      * And now the FPA/cp1 branch instructions.
0065      */
0066     case cop1_op:
0067 #ifdef CONFIG_CPU_CAVIUM_OCTEON
0068     case lwc2_op: /* This is bbit0 on Octeon */
0069     case ldc2_op: /* This is bbit032 on Octeon */
0070     case swc2_op: /* This is bbit1 on Octeon */
0071     case sdc2_op: /* This is bbit132 on Octeon */
0072 #endif
0073         return 1;
0074     }
0075 
0076     return 0;
0077 }
0078 
0079 #endif  /* __PROBES_COMMON_H */