linux/arch/mips/kernel/probes-common.h
<<
>>
Prefs
   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
  16int __insn_is_compact_branch(union mips_instruction insn);
  17
  18static 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