mirror of
https://git.wuffs.org/MWCC
synced 2025-07-25 14:45:36 +00:00
68 lines
2.0 KiB
C
68 lines
2.0 KiB
C
#ifndef COMPILER_REGISTERS_H
|
|
#define COMPILER_REGISTERS_H
|
|
|
|
#include "compiler/common.h"
|
|
|
|
enum {
|
|
Register0 = 0,
|
|
Register2 = 2,
|
|
RegisterMax = 32
|
|
};
|
|
/*const char RegClass_SPR = 0;
|
|
const char RegClass_CRFIELD = 1;
|
|
const char RegClass_VR = 2;
|
|
const char RegClass_FPR = 3;
|
|
const char RegClass_GPR = 4;
|
|
const char RegClassMax = 5;
|
|
const char RegClass_6 = 6;
|
|
const char RegClass_DCR = 7;*/
|
|
typedef enum RegClass {
|
|
RegClass_Invalid = -1,
|
|
RegClass_SPR = 0,
|
|
RegClass_CRFIELD = 1,
|
|
RegClass_VR = 2,
|
|
RegClass_FPR = 3,
|
|
RegClass_GPR = 4,
|
|
RegClassMax = 5,
|
|
RegClass_6 = 6,
|
|
RegClass_DCR = 7
|
|
} RegClass;
|
|
|
|
enum {
|
|
RegState0 = 0,
|
|
RegState1 = 1,
|
|
RegState2 = 2
|
|
};
|
|
|
|
extern int used_virtual_registers[RegClassMax];
|
|
extern int used_nonvolatile_registers[RegClassMax];
|
|
extern int assignable_registers[RegClassMax];
|
|
extern int n_real_registers[RegClassMax];
|
|
extern int n_scratch_registers[RegClassMax];
|
|
extern int scratch_registers[RegClassMax][RegisterMax];
|
|
extern int n_nonvolatile_registers[RegClassMax];
|
|
extern int nonvolatile_registers[RegClassMax][RegisterMax];
|
|
extern UInt8 reg_state[RegClassMax][RegisterMax];
|
|
extern int first_temporary_register[RegClassMax];
|
|
extern int last_temporary_register[RegClassMax];
|
|
extern char *register_class_name[RegClassMax];
|
|
extern char *register_class_format[RegClassMax];
|
|
extern int coloring;
|
|
extern int optimizing;
|
|
|
|
extern void init_registers(void);
|
|
extern void assign_register_to_variable(Object *obj, char rclass);
|
|
extern void retain_register_for_argument(Object *obj, char rclass, short reg);
|
|
extern int available_registers(char rclass);
|
|
extern UInt32 volatile_registers(char rclass);
|
|
extern short obtain_nonvolatile_register(char rclass);
|
|
extern void open_temp_registers(void);
|
|
extern void check_temp_registers(void);
|
|
extern void close_temp_registers(void);
|
|
extern int count_scratch_registers(void);
|
|
extern void init_modified_registers(void);
|
|
extern void note_modified_registers(Object *obj);
|
|
extern void find_modified_registers(Object *obj, UInt32 *masks);
|
|
|
|
#endif
|