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

#include "bearch.h"

/** global register indices for TEMPLATE registers */
enum reg_indices {
	REG_F0,
	REG_F1,
	REG_F2,
	REG_F3,
	REG_F4,
	REG_F5,
	REG_F6,
	REG_F7,
	REG_F8,
	REG_F9,
	REG_F10,
	REG_F11,
	REG_F12,
	REG_F13,
	REG_F14,
	REG_F15,
	REG_R0,
	REG_R1,
	REG_R2,
	REG_R3,
	REG_R4,
	REG_R5,
	REG_R6,
	REG_R7,
	REG_R8,
	REG_R9,
	REG_R10,
	REG_R11,
	REG_R12,
	REG_R13,
	REG_SP,
	REG_BP,

	N_TEMPLATE_REGISTERS
};

/** local register indices for TEMPLATE registers */
enum {
	REG_FP_F0,
	REG_FP_F1,
	REG_FP_F2,
	REG_FP_F3,
	REG_FP_F4,
	REG_FP_F5,
	REG_FP_F6,
	REG_FP_F7,
	REG_FP_F8,
	REG_FP_F9,
	REG_FP_F10,
	REG_FP_F11,
	REG_FP_F12,
	REG_FP_F13,
	REG_FP_F14,
	REG_FP_F15,
};

enum {
	REG_GP_R0,
	REG_GP_R1,
	REG_GP_R2,
	REG_GP_R3,
	REG_GP_R4,
	REG_GP_R5,
	REG_GP_R6,
	REG_GP_R7,
	REG_GP_R8,
	REG_GP_R9,
	REG_GP_R10,
	REG_GP_R11,
	REG_GP_R12,
	REG_GP_R13,
	REG_GP_SP,
	REG_GP_BP,
};


/** number of registers in TEMPLATE register classes. */
enum {
	N_TEMPLATE_fp_REGS = 16,
	N_TEMPLATE_gp_REGS = 16,

};

enum {
	CLASS_TEMPLATE_fp,
	CLASS_TEMPLATE_gp,
	N_TEMPLATE_CLASSES = 2
};

extern const arch_register_req_t TEMPLATE_class_reg_req_fp;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f0;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f1;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f2;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f3;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f4;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f5;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f6;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f7;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f8;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f9;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f10;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f11;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f12;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f13;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f14;
extern const arch_register_req_t TEMPLATE_single_reg_req_fp_f15;
extern const arch_register_req_t TEMPLATE_class_reg_req_gp;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r0;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r1;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r2;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r3;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r4;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r5;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r6;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r7;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r8;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r9;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r10;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r11;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r12;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_r13;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_sp;
extern const arch_register_req_t TEMPLATE_single_reg_req_gp_bp;


extern const arch_register_t TEMPLATE_registers[N_TEMPLATE_REGISTERS];

extern arch_register_class_t TEMPLATE_reg_classes[N_TEMPLATE_CLASSES];

void TEMPLATE_register_init(void);

#endif
