Linux Audio

Check our new training course

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