/**
 * @file
 * @brief Contains additional external requirements defs for external includes.
 * @note   DO NOT EDIT THIS FILE, your changes will be lost.
 *         Edit ./ir/be/mips/mips_spec.pl instead.
 *         created by: ./ir/be/scripts/generate_regalloc_if.pl ./ir/be/mips/mips_spec.pl build/gen/ir/be/mips
 * @date   Tue Jul  7 23:51:18 2026
 */
#ifndef FIRM_BE_MIPS_GEN_MIPS_REGALLOC_IF_H
#define FIRM_BE_MIPS_GEN_MIPS_REGALLOC_IF_H

#include "bearch.h"

/** global register indices for mips registers */
enum reg_indices {
	REG_ZERO,
	REG_AT,
	REG_V0,
	REG_V1,
	REG_A0,
	REG_A1,
	REG_A2,
	REG_A3,
	REG_T0,
	REG_T1,
	REG_T2,
	REG_T3,
	REG_T4,
	REG_T5,
	REG_T6,
	REG_T7,
	REG_S0,
	REG_S1,
	REG_S2,
	REG_S3,
	REG_S4,
	REG_S5,
	REG_S6,
	REG_S7,
	REG_T8,
	REG_T9,
	REG_K0,
	REG_K1,
	REG_GP,
	REG_SP,
	REG_S8,
	REG_RA,

	N_MIPS_REGISTERS
};

/** local register indices for mips registers */
enum {
	REG_GP_ZERO,
	REG_GP_AT,
	REG_GP_V0,
	REG_GP_V1,
	REG_GP_A0,
	REG_GP_A1,
	REG_GP_A2,
	REG_GP_A3,
	REG_GP_T0,
	REG_GP_T1,
	REG_GP_T2,
	REG_GP_T3,
	REG_GP_T4,
	REG_GP_T5,
	REG_GP_T6,
	REG_GP_T7,
	REG_GP_S0,
	REG_GP_S1,
	REG_GP_S2,
	REG_GP_S3,
	REG_GP_S4,
	REG_GP_S5,
	REG_GP_S6,
	REG_GP_S7,
	REG_GP_T8,
	REG_GP_T9,
	REG_GP_K0,
	REG_GP_K1,
	REG_GP_GP,
	REG_GP_SP,
	REG_GP_S8,
	REG_GP_RA,
};


/** number of registers in mips register classes. */
enum {
	N_mips_gp_REGS = 32,

};

enum {
	CLASS_mips_gp,
	N_MIPS_CLASSES = 1
};

extern const arch_register_req_t mips_class_reg_req_gp;
extern const arch_register_req_t mips_single_reg_req_gp_zero;
extern const arch_register_req_t mips_single_reg_req_gp_at;
extern const arch_register_req_t mips_single_reg_req_gp_v0;
extern const arch_register_req_t mips_single_reg_req_gp_v1;
extern const arch_register_req_t mips_single_reg_req_gp_a0;
extern const arch_register_req_t mips_single_reg_req_gp_a1;
extern const arch_register_req_t mips_single_reg_req_gp_a2;
extern const arch_register_req_t mips_single_reg_req_gp_a3;
extern const arch_register_req_t mips_single_reg_req_gp_t0;
extern const arch_register_req_t mips_single_reg_req_gp_t1;
extern const arch_register_req_t mips_single_reg_req_gp_t2;
extern const arch_register_req_t mips_single_reg_req_gp_t3;
extern const arch_register_req_t mips_single_reg_req_gp_t4;
extern const arch_register_req_t mips_single_reg_req_gp_t5;
extern const arch_register_req_t mips_single_reg_req_gp_t6;
extern const arch_register_req_t mips_single_reg_req_gp_t7;
extern const arch_register_req_t mips_single_reg_req_gp_s0;
extern const arch_register_req_t mips_single_reg_req_gp_s1;
extern const arch_register_req_t mips_single_reg_req_gp_s2;
extern const arch_register_req_t mips_single_reg_req_gp_s3;
extern const arch_register_req_t mips_single_reg_req_gp_s4;
extern const arch_register_req_t mips_single_reg_req_gp_s5;
extern const arch_register_req_t mips_single_reg_req_gp_s6;
extern const arch_register_req_t mips_single_reg_req_gp_s7;
extern const arch_register_req_t mips_single_reg_req_gp_t8;
extern const arch_register_req_t mips_single_reg_req_gp_t9;
extern const arch_register_req_t mips_single_reg_req_gp_k0;
extern const arch_register_req_t mips_single_reg_req_gp_k1;
extern const arch_register_req_t mips_single_reg_req_gp_gp;
extern const arch_register_req_t mips_single_reg_req_gp_sp;
extern const arch_register_req_t mips_single_reg_req_gp_s8;
extern const arch_register_req_t mips_single_reg_req_gp_ra;


extern const arch_register_t mips_registers[N_MIPS_REGISTERS];

extern arch_register_class_t mips_reg_classes[N_MIPS_CLASSES];

void mips_register_init(void);

#endif
