mirror of
https://git.wuffs.org/MWCC
synced 2025-08-11 01:59:39 +00:00
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
#include "compiler/InlineAsmRegisters.h"
|
|
#include "compiler/CompilerTools.h"
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma options align=mac68k
|
|
#endif
|
|
typedef struct HashedRegister {
|
|
struct HashedRegister *next;
|
|
IARegister reg;
|
|
} HashedRegister;
|
|
#ifdef __MWERKS__
|
|
#pragma options align=reset
|
|
#endif
|
|
|
|
static HashedRegister *hashedregisters[64];
|
|
|
|
void InlineAsm_InitializeRegisters(void) {
|
|
SInt32 i;
|
|
|
|
for (i = 0; i < 64; i++)
|
|
hashedregisters[i] = NULL;
|
|
}
|
|
|
|
void InlineAsm_InsertRegister(char *name, RegClass rclass, short num, Object *object) {
|
|
HashedRegister **ptr;
|
|
HashedRegister *hr;
|
|
|
|
ptr = hashedregisters + (CHash(name) & 63);
|
|
hr = lalloc(sizeof(HashedRegister));
|
|
hr->reg.name = name;
|
|
hr->reg.rclass = rclass;
|
|
hr->reg.num = num;
|
|
hr->reg.object = object;
|
|
|
|
hr->next = *ptr;
|
|
*ptr = hr;
|
|
}
|
|
|
|
IARegister *InlineAsm_LookupRegister(char *name) {
|
|
HashedRegister *scan;
|
|
IARegister *reg;
|
|
|
|
for (scan = hashedregisters[CHash(name) & 63]; scan; scan = scan->next) {
|
|
reg = &scan->reg;
|
|
if (!strcmp(scan->reg.name, name))
|
|
return reg;
|
|
}
|
|
|
|
return NULL;
|
|
}
|