cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

probes-common.h (1512B)


      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 */