/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * Various register offset definitions for debuggers, core file
 * examiners and whatnot.
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 1995, 1999 Ralf Baechle
 * Copyright (C) 1995, 1999 Silicon Graphics
 */
#ifndef __UAPI_ASM_MIPS_REG_H
#define __UAPI_ASM_MIPS_REG_H

#define MIPS32_EF_R0		6
#define MIPS32_EF_R1		7
#define MIPS32_EF_R2		8
#define MIPS32_EF_R3		9
#define MIPS32_EF_R4		10
#define MIPS32_EF_R5		11
#define MIPS32_EF_R6		12
#define MIPS32_EF_R7		13
#define MIPS32_EF_R8		14
#define MIPS32_EF_R9		15
#define MIPS32_EF_R10		16
#define MIPS32_EF_R11		17
#define MIPS32_EF_R12		18
#define MIPS32_EF_R13		19
#define MIPS32_EF_R14		20
#define MIPS32_EF_R15		21
#define MIPS32_EF_R16		22
#define MIPS32_EF_R17		23
#define MIPS32_EF_R18		24
#define MIPS32_EF_R19		25
#define MIPS32_EF_R20		26
#define MIPS32_EF_R21		27
#define MIPS32_EF_R22		28
#define MIPS32_EF_R23		29
#define MIPS32_EF_R24		30
#define MIPS32_EF_R25		31

/*
 * k0/k1 unsaved
 */
#define MIPS32_EF_R26		32
#define MIPS32_EF_R27		33

#define MIPS32_EF_R28		34
#define MIPS32_EF_R29		35
#define MIPS32_EF_R30		36
#define MIPS32_EF_R31		37

/*
 * Saved special registers
 */
#define MIPS32_EF_LO		38
#define MIPS32_EF_HI		39

#define MIPS32_EF_CP0_EPC	40
#define MIPS32_EF_CP0_BADVADDR	41
#define MIPS32_EF_CP0_STATUS	42
#define MIPS32_EF_CP0_CAUSE	43
#define MIPS32_EF_UNUSED0	44

#define MIPS32_EF_SIZE		180

#define MIPS64_EF_R0		0
#define MIPS64_EF_R1		1
#define MIPS64_EF_R2		2
#define MIPS64_EF_R3		3
#define MIPS64_EF_R4		4
#define MIPS64_EF_R5		5
#define MIPS64_EF_R6		6
#define MIPS64_EF_R7		7
#define MIPS64_EF_R8		8
#define MIPS64_EF_R9		9
#define MIPS64_EF_R10		10
#define MIPS64_EF_R11		11
#define MIPS64_EF_R12		12
#define MIPS64_EF_R13		13
#define MIPS64_EF_R14		14
#define MIPS64_EF_R15		15
#define MIPS64_EF_R16		16
#define MIPS64_EF_R17		17
#define MIPS64_EF_R18		18
#define MIPS64_EF_R19		19
#define MIPS64_EF_R20		20
#define MIPS64_EF_R21		21
#define MIPS64_EF_R22		22
#define MIPS64_EF_R23		23
#define MIPS64_EF_R24		24
#define MIPS64_EF_R25		25

/*
 * k0/k1 unsaved
 */
#define MIPS64_EF_R26		26
#define MIPS64_EF_R27		27


#define MIPS64_EF_R28		28
#define MIPS64_EF_R29		29
#define MIPS64_EF_R30		30
#define MIPS64_EF_R31		31

/*
 * Saved special registers
 */
#define MIPS64_EF_LO		32
#define MIPS64_EF_HI		33

#define MIPS64_EF_CP0_EPC	34
#define MIPS64_EF_CP0_BADVADDR	35
#define MIPS64_EF_CP0_STATUS	36
#define MIPS64_EF_CP0_CAUSE	37

#define MIPS64_EF_SIZE		304	/* size in bytes */

#if _MIPS_SIM == _MIPS_SIM_ABI32

#define EF_R0			MIPS32_EF_R0
#define EF_R1			MIPS32_EF_R1
#define EF_R2			MIPS32_EF_R2
#define EF_R3			MIPS32_EF_R3
#define EF_R4			MIPS32_EF_R4
#define EF_R5			MIPS32_EF_R5
#define EF_R6			MIPS32_EF_R6
#define EF_R7			MIPS32_EF_R7
#define EF_R8			MIPS32_EF_R8
#define EF_R9			MIPS32_EF_R9
#define EF_R10			MIPS32_EF_R10
#define EF_R11			MIPS32_EF_R11
#define EF_R12			MIPS32_EF_R12
#define EF_R13			MIPS32_EF_R13
#define EF_R14			MIPS32_EF_R14
#define EF_R15			MIPS32_EF_R15
#define EF_R16			MIPS32_EF_R16
#define EF_R17			MIPS32_EF_R17
#define EF_R18			MIPS32_EF_R18
#define EF_R19			MIPS32_EF_R19
#define EF_R20			MIPS32_EF_R20
#define EF_R21			MIPS32_EF_R21
#define EF_R22			MIPS32_EF_R22
#define EF_R23			MIPS32_EF_R23
#define EF_R24			MIPS32_EF_R24
#define EF_R25			MIPS32_EF_R25
#define EF_R26			MIPS32_EF_R26
#define EF_R27			MIPS32_EF_R27
#define EF_R28			MIPS32_EF_R28
#define EF_R29			MIPS32_EF_R29
#define EF_R30			MIPS32_EF_R30
#define EF_R31			MIPS32_EF_R31
#define EF_LO			MIPS32_EF_LO
#define EF_HI			MIPS32_EF_HI
#define EF_CP0_EPC		MIPS32_EF_CP0_EPC
#define EF_CP0_BADVADDR		MIPS32_EF_CP0_BADVADDR
#define EF_CP0_STATUS		MIPS32_EF_CP0_STATUS
#define EF_CP0_CAUSE		MIPS32_EF_CP0_CAUSE
#define EF_UNUSED0		MIPS32_EF_UNUSED0
#define EF_SIZE			MIPS32_EF_SIZE

#elif _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32

#define EF_R0			MIPS64_EF_R0
#define EF_R1			MIPS64_EF_R1
#define EF_R2			MIPS64_EF_R2
#define EF_R3			MIPS64_EF_R3
#define EF_R4			MIPS64_EF_R4
#define EF_R5			MIPS64_EF_R5
#define EF_R6			MIPS64_EF_R6
#define EF_R7			MIPS64_EF_R7
#define EF_R8			MIPS64_EF_R8
#define EF_R9			MIPS64_EF_R9
#define EF_R10			MIPS64_EF_R10
#define EF_R11			MIPS64_EF_R11
#define EF_R12			MIPS64_EF_R12
#define EF_R13			MIPS64_EF_R13
#define EF_R14			MIPS64_EF_R14
#define EF_R15			MIPS64_EF_R15
#define EF_R16			MIPS64_EF_R16
#define EF_R17			MIPS64_EF_R17
#define EF_R18			MIPS64_EF_R18
#define EF_R19			MIPS64_EF_R19
#define EF_R20			MIPS64_EF_R20
#define EF_R21			MIPS64_EF_R21
#define EF_R22			MIPS64_EF_R22
#define EF_R23			MIPS64_EF_R23
#define EF_R24			MIPS64_EF_R24
#define EF_R25			MIPS64_EF_R25
#define EF_R26			MIPS64_EF_R26
#define EF_R27			MIPS64_EF_R27
#define EF_R28			MIPS64_EF_R28
#define EF_R29			MIPS64_EF_R29
#define EF_R30			MIPS64_EF_R30
#define EF_R31			MIPS64_EF_R31
#define EF_LO			MIPS64_EF_LO
#define EF_HI			MIPS64_EF_HI
#define EF_CP0_EPC		MIPS64_EF_CP0_EPC
#define EF_CP0_BADVADDR		MIPS64_EF_CP0_BADVADDR
#define EF_CP0_STATUS		MIPS64_EF_CP0_STATUS
#define EF_CP0_CAUSE		MIPS64_EF_CP0_CAUSE
#define EF_SIZE			MIPS64_EF_SIZE

#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32 */

#endif /* __UAPI_ASM_MIPS_REG_H */
