Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
 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 */