616500232e
Add LoongArch's vector extensions support, which including 128bit LSX (i.e., Loongson SIMD eXtension) and 256bit LASX (i.e., Loongson Advanced SIMD eXtension). Linux kernel doesn't use vector itself, it only handle exceptions and context save/restore. So it only needs a subset of these instructions: * Vector load/store: vld vst vldx vstx xvld xvst xvldx xvstx * 8bit-elements move: vpickve2gr.b xvpickve2gr.b vinsgr2vr.b xvinsgr2vr.b * 16bit-elements move: vpickve2gr.h xvpickve2gr.h vinsgr2vr.h xvinsgr2vr.h * 32bit-elements move: vpickve2gr.w xvpickve2gr.w vinsgr2vr.w xvinsgr2vr.w * 64bit-elements move: vpickve2gr.d xvpickve2gr.d vinsgr2vr.d xvinsgr2vr.d * Elements permute: vpermi.w vpermi.d xvpermi.w xvpermi.d xvpermi.q Introduce AS_HAS_LSX_EXTENSION and AS_HAS_LASX_EXTENSION to avoid non- vector toolchains complains unsupported instructions. Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
|
|
/*
|
|
* Author: Hanlu Li <lihanlu@loongson.cn>
|
|
* Huacai Chen <chenhuacai@loongson.cn>
|
|
*
|
|
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
|
|
*/
|
|
#ifndef _UAPI_ASM_SIGCONTEXT_H
|
|
#define _UAPI_ASM_SIGCONTEXT_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/posix_types.h>
|
|
|
|
/* FP context was used */
|
|
#define SC_USED_FP (1 << 0)
|
|
/* Address error was due to memory load */
|
|
#define SC_ADDRERR_RD (1 << 30)
|
|
/* Address error was due to memory store */
|
|
#define SC_ADDRERR_WR (1 << 31)
|
|
|
|
struct sigcontext {
|
|
__u64 sc_pc;
|
|
__u64 sc_regs[32];
|
|
__u32 sc_flags;
|
|
__u64 sc_extcontext[0] __attribute__((__aligned__(16)));
|
|
};
|
|
|
|
#define CONTEXT_INFO_ALIGN 16
|
|
struct sctx_info {
|
|
__u32 magic;
|
|
__u32 size;
|
|
__u64 padding; /* padding to 16 bytes */
|
|
};
|
|
|
|
/* FPU context */
|
|
#define FPU_CTX_MAGIC 0x46505501
|
|
#define FPU_CTX_ALIGN 8
|
|
struct fpu_context {
|
|
__u64 regs[32];
|
|
__u64 fcc;
|
|
__u32 fcsr;
|
|
};
|
|
|
|
/* LSX context */
|
|
#define LSX_CTX_MAGIC 0x53580001
|
|
#define LSX_CTX_ALIGN 16
|
|
struct lsx_context {
|
|
__u64 regs[2*32];
|
|
__u64 fcc;
|
|
__u32 fcsr;
|
|
};
|
|
|
|
/* LASX context */
|
|
#define LASX_CTX_MAGIC 0x41535801
|
|
#define LASX_CTX_ALIGN 32
|
|
struct lasx_context {
|
|
__u64 regs[4*32];
|
|
__u64 fcc;
|
|
__u32 fcsr;
|
|
};
|
|
|
|
#endif /* _UAPI_ASM_SIGCONTEXT_H */
|