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

jump_label.h (1019B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_PARISC_JUMP_LABEL_H
      3#define _ASM_PARISC_JUMP_LABEL_H
      4
      5#ifndef __ASSEMBLY__
      6
      7#include <linux/types.h>
      8#include <linux/stringify.h>
      9#include <asm/assembly.h>
     10
     11#define JUMP_LABEL_NOP_SIZE 4
     12
     13static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
     14{
     15	asm_volatile_goto("1:\n\t"
     16		 "nop\n\t"
     17		 ".pushsection __jump_table,  \"aw\"\n\t"
     18		 ".word 1b - ., %l[l_yes] - .\n\t"
     19		 __stringify(ASM_ULONG_INSN) " %c0 - .\n\t"
     20		 ".popsection\n\t"
     21		 : :  "i" (&((char *)key)[branch]) :  : l_yes);
     22
     23	return false;
     24l_yes:
     25	return true;
     26}
     27
     28static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
     29{
     30	asm_volatile_goto("1:\n\t"
     31		 "b,n %l[l_yes]\n\t"
     32		 ".pushsection __jump_table,  \"aw\"\n\t"
     33		 ".word 1b - ., %l[l_yes] - .\n\t"
     34		 __stringify(ASM_ULONG_INSN) " %c0 - .\n\t"
     35		 ".popsection\n\t"
     36		 : :  "i" (&((char *)key)[branch]) :  : l_yes);
     37
     38	return false;
     39l_yes:
     40	return true;
     41}
     42
     43#endif  /* __ASSEMBLY__ */
     44#endif