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

internal.h (1472B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * FPU state and register content conversion primitives
      4 *
      5 * Copyright IBM Corp. 2015
      6 * Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
      7 */
      8
      9#ifndef _ASM_S390_FPU_INTERNAL_H
     10#define _ASM_S390_FPU_INTERNAL_H
     11
     12#include <linux/string.h>
     13#include <asm/ctl_reg.h>
     14#include <asm/fpu/types.h>
     15
     16static inline void save_vx_regs(__vector128 *vxrs)
     17{
     18	asm volatile(
     19		"	la	1,%0\n"
     20		"	.word	0xe70f,0x1000,0x003e\n"	/* vstm 0,15,0(1) */
     21		"	.word	0xe70f,0x1100,0x0c3e\n"	/* vstm 16,31,256(1) */
     22		: "=Q" (*(struct vx_array *) vxrs) : : "1");
     23}
     24
     25static inline void convert_vx_to_fp(freg_t *fprs, __vector128 *vxrs)
     26{
     27	int i;
     28
     29	for (i = 0; i < __NUM_FPRS; i++)
     30		fprs[i] = *(freg_t *)(vxrs + i);
     31}
     32
     33static inline void convert_fp_to_vx(__vector128 *vxrs, freg_t *fprs)
     34{
     35	int i;
     36
     37	for (i = 0; i < __NUM_FPRS; i++)
     38		*(freg_t *)(vxrs + i) = fprs[i];
     39}
     40
     41static inline void fpregs_store(_s390_fp_regs *fpregs, struct fpu *fpu)
     42{
     43	fpregs->pad = 0;
     44	fpregs->fpc = fpu->fpc;
     45	if (MACHINE_HAS_VX)
     46		convert_vx_to_fp((freg_t *)&fpregs->fprs, fpu->vxrs);
     47	else
     48		memcpy((freg_t *)&fpregs->fprs, fpu->fprs,
     49		       sizeof(fpregs->fprs));
     50}
     51
     52static inline void fpregs_load(_s390_fp_regs *fpregs, struct fpu *fpu)
     53{
     54	fpu->fpc = fpregs->fpc;
     55	if (MACHINE_HAS_VX)
     56		convert_fp_to_vx(fpu->vxrs, (freg_t *)&fpregs->fprs);
     57	else
     58		memcpy(fpu->fprs, (freg_t *)&fpregs->fprs,
     59		       sizeof(fpregs->fprs));
     60}
     61
     62#endif /* _ASM_S390_FPU_INTERNAL_H */