rename some stuff and use an enum for RegClass

This commit is contained in:
Ash Wolf
2022-12-14 01:00:56 +00:00
parent 25bab8b1fb
commit bc1321735c
28 changed files with 234 additions and 293 deletions

View File

@@ -2,10 +2,8 @@
#define COMPILER_COLORING_H
#include "compiler/common.h"
#include "compiler/Registers.h"
//extern RegClass coloring_class;
extern char coloring_class;
extern RegClass coloring_class;
extern void colorinstructions(Object *proc);

View File

@@ -17,7 +17,7 @@ typedef struct IAMnemonic {
typedef struct IARegister {
char *name;
char rclass;
RegClass rclass;
SInt32 num;
Object *object;
} IARegister;

View File

@@ -5,7 +5,7 @@
#include "compiler/InlineAsm.h"
extern void InlineAsm_InitializeRegisters(void);
extern void InlineAsm_InsertRegister(char *name, char rclass, short num, Object *object);
extern void InlineAsm_InsertRegister(char *name, RegClass rclass, short num, Object *object);
extern IARegister *InlineAsm_LookupRegister(char *name);
#endif

View File

@@ -4,15 +4,15 @@
#include "compiler/common.h"
typedef struct LiveInfo {
UInt32 *vec0; // use
UInt32 *vec4; // def
UInt32 *vec8; // in
UInt32 *vecC; // out
UInt32 *use;
UInt32 *def;
UInt32 *in;
UInt32 *out;
} LiveInfo;
extern LiveInfo *liveinfo;
extern void computelivevariables(Object *proc);
extern int dead(PCode *instr, char rclass, UInt32 *vec);
extern int dead(PCode *instr, RegClass rclass, UInt32 *vec);
#endif

View File

@@ -51,7 +51,7 @@ typedef enum {
struct PCodeArg {
PCOpKind kind;
unsigned char arg;
RegClass arg;
union {
struct {
unsigned short effect;
@@ -79,33 +79,33 @@ struct PCodeArg {
#define PC_OP_IS_REGISTER(_op, _rclass, _reg) \
((_op)->kind == PCOp_REGISTER && \
(char) (_op)->arg == (_rclass) && \
(_op)->arg == (_rclass) && \
(_op)->data.reg.reg == (_reg))
#define PC_OP_IS_READ_REGISTER(_op, _rclass, _reg) \
((_op)->kind == PCOp_REGISTER && \
(char) (_op)->arg == (_rclass) && \
(_op)->arg == (_rclass) && \
(_op)->data.reg.reg == (_reg) && \
((_op)->data.reg.effect & EffectRead))
#define PC_OP_IS_WRITE_REGISTER(_op, _rclass, _reg) \
((_op)->kind == PCOp_REGISTER && \
(char) (_op)->arg == (_rclass) && \
(_op)->arg == (_rclass) && \
(_op)->data.reg.reg == (_reg) && \
((_op)->data.reg.effect & EffectWrite))
#define PC_OP_IS_ANY_REGISTER(_op, _rclass) \
((_op)->kind == PCOp_REGISTER && \
(char) (_op)->arg == (_rclass))
(_op)->arg == (_rclass))
#define PC_OP_IS_READ_ANY_REGISTER(_op, _rclass) \
((_op)->kind == PCOp_REGISTER && \
(char) (_op)->arg == (_rclass) && \
(_op)->arg == (_rclass) && \
((_op)->data.reg.effect & EffectRead))
#define PC_OP_IS_WRITE_ANY_REGISTER(_op, _rclass) \
((_op)->kind == PCOp_REGISTER && \
(char) (_op)->arg == (_rclass) && \
(_op)->arg == (_rclass) && \
((_op)->data.reg.effect & EffectWrite))

View File

@@ -18,6 +18,7 @@ typedef enum {
} PCOpKind;
typedef enum {
PCOpMemory0 = 0,
PCOpMemory1 = 1
} PCOpMemoryArg;

View File

@@ -12,12 +12,12 @@ extern short _CALLER_SP_;
extern char *special_register_names[RegClassMax][RegisterMax];
extern short spr_to_sysreg[4];
extern void asm_used_register(char rclass, short reg);
extern void retain_register(Object *obj, char rclass, short reg);
extern void asm_used_register(RegClass rclass, short reg);
extern void retain_register(Object *obj, RegClass rclass, short reg);
extern void retain_GPR_pair(Object *obj, short reg, short regHi);
extern int is_register_object(Object *obj);
extern int GetABIFirstNonVolatile(char rclass);
extern char GetRegisterClassName(char rclass);
extern int GetABIFirstNonVolatile(RegClass rclass);
extern char GetRegisterClassName(RegClass rclass);
extern void setup_diagnostic_reg_strings(void);
extern void init_target_registers(void);
extern void assign_register_by_type(Object *obj);
@@ -27,9 +27,9 @@ extern void set_last_exception_registers(void);
extern VarInfo *Registers_GetVarInfo(Object *obj);
extern int used_vrstate_VRs(void);
extern UInt32 colored_vrs_as_vrsave(PCodeBlock *block);
extern void save_before_coloring_nonvolatile_registers(char rclass);
extern void reset_nonvolatile_registers(char rclass);
extern int is_nonvolatile_register(char rclass, int reg);
extern void save_before_coloring_nonvolatile_registers(RegClass rclass);
extern void reset_nonvolatile_registers(RegClass rclass);
extern int is_nonvolatile_register(RegClass rclass, int reg);
extern void init_endian(void);
extern void update_asm_nonvolatile_registers(void);

View File

@@ -8,25 +8,6 @@ enum {
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,
@@ -51,11 +32,11 @@ 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 assign_register_to_variable(Object *obj, RegClass rclass);
extern void retain_register_for_argument(Object *obj, RegClass rclass, short reg);
extern int available_registers(RegClass rclass);
extern UInt32 volatile_registers(RegClass rclass);
extern short obtain_nonvolatile_register(RegClass rclass);
extern void open_temp_registers(void);
extern void check_temp_registers(void);
extern void close_temp_registers(void);

View File

@@ -2,7 +2,6 @@
#define COMPILER_USEDEFCHAINS_H
#include "compiler/common.h"
#include "compiler/Registers.h"
#include "compiler/PCodeInfo.h"
#ifdef __MWERKS__
@@ -10,7 +9,7 @@
#endif
typedef struct TinyValue {
PCOpKind kind;
unsigned char arg;
RegClass arg;
union {
short reg;
Object *object;

View File

@@ -10,8 +10,6 @@ typedef struct HashNameNode {
char name[1];
} HashNameNode;
typedef struct CPrepFileInfo CPrepFileInfo;
#ifdef __MWERKS__
#pragma options align=mac68k
#endif
@@ -118,6 +116,7 @@ typedef struct CI_FuncData CI_FuncData;
typedef struct CLabel CLabel;
typedef struct ClassList ClassList;
typedef struct CParams CParams;
typedef struct CPrepFileInfo CPrepFileInfo;
typedef struct DeclInfo DeclInfo;
typedef struct DeclThing DeclThing; // rename me please
typedef struct DefArgCtorInfo DefArgCtorInfo;
@@ -307,6 +306,18 @@ enum {
EXPORT_FLAGS_EXPORT = 0x40
};
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;
#ifdef __MWERKS__
#pragma options align=mac68k
#endif