Refactor codegen, allow compiling for linux
This commit is contained in:
parent
bfebf647eb
commit
29b797d7dc
|
@ -9,7 +9,8 @@ add_executable(Erythro
|
||||||
include/Data.h
|
include/Data.h
|
||||||
include/Defs.h
|
include/Defs.h
|
||||||
src/assemble/AssemblerDispatcher.c
|
src/assemble/AssemblerDispatcher.c
|
||||||
src/assemble/ASMAssembler.c
|
src/assemble/Win32GASAssembler.c
|
||||||
|
src/assemble/LinuxGASAssembler.c
|
||||||
src/assemble/QBEAssembler.c
|
src/assemble/QBEAssembler.c
|
||||||
src/Delegate.c
|
src/Delegate.c
|
||||||
src/Dump.c
|
src/Dump.c
|
||||||
|
@ -21,4 +22,5 @@ add_executable(Erythro
|
||||||
src/Symbols.c
|
src/Symbols.c
|
||||||
src/Types.c
|
src/Types.c
|
||||||
src/Importer.c
|
src/Importer.c
|
||||||
src/assemble/JVMAssembler.c src/Errors.c)
|
src/assemble/JVMAssembler.c
|
||||||
|
src/Errors.c)
|
||||||
|
|
|
@ -609,6 +609,7 @@ void RegisterAllModules();
|
||||||
// Module List
|
// Module List
|
||||||
void RegisterQBE();
|
void RegisterQBE();
|
||||||
void RegisterWin32ASM();
|
void RegisterWin32ASM();
|
||||||
|
void RegisterLinuxASM();
|
||||||
void RegisterJVM();
|
void RegisterJVM();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,11 @@ int main(int argc, char* argv[]) {
|
||||||
OptAssembleFiles = true;
|
OptAssembleFiles = true;
|
||||||
OptLinkFiles = true;
|
OptLinkFiles = true;
|
||||||
OptVerboseOutput = false;
|
OptVerboseOutput = false;
|
||||||
OptAssemblerName = "Win32 GAS ASM";
|
OptAssemblerName = "Win32";
|
||||||
|
|
||||||
|
struct FileData* InitData = malloc(sizeof(struct FileData));
|
||||||
|
InitData->CurrentLine = 0;
|
||||||
|
CurrentFile = InitData;
|
||||||
|
|
||||||
// Temporary .o storage and counter
|
// Temporary .o storage and counter
|
||||||
int ObjectCount = 0;
|
int ObjectCount = 0;
|
||||||
|
|
|
@ -9,6 +9,10 @@
|
||||||
#include "Defs.h"
|
#include "Defs.h"
|
||||||
#include "Data.h"
|
#include "Data.h"
|
||||||
|
|
||||||
|
#if defined(__GNUC__) || defined(APPLE)
|
||||||
|
#include <errno.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Precedence of an operator is directly related to Token Type.
|
* The Precedence of an operator is directly related to Token Type.
|
||||||
* Precedence determines how soon the operator and its surrounding values
|
* Precedence determines how soon the operator and its surrounding values
|
||||||
|
|
|
@ -6,12 +6,13 @@
|
||||||
#include <Defs.h>
|
#include <Defs.h>
|
||||||
#include <Data.h>
|
#include <Data.h>
|
||||||
|
|
||||||
#define MODULES_SIZE 3
|
#define MODULES_SIZE 4
|
||||||
struct AssemblerModule* modules[MODULES_SIZE];
|
struct AssemblerModule* modules[MODULES_SIZE];
|
||||||
static int moduleID = 0;
|
static int moduleID = 0;
|
||||||
|
|
||||||
void RegisterAllModules() {
|
void RegisterAllModules() {
|
||||||
RegisterWin32ASM();
|
RegisterWin32ASM();
|
||||||
|
RegisterLinuxASM();
|
||||||
RegisterQBE();
|
RegisterQBE();
|
||||||
RegisterJVM();
|
RegisterJVM();
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ static const struct AssemblerVtable JVMAssemblerVtable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct AssemblerModule JVMAssemblerModule = {
|
static const struct AssemblerModule JVMAssemblerModule = {
|
||||||
.name = "JVM Bytecode",
|
.name = "JVM",
|
||||||
.vtable = &JVMAssemblerVtable
|
.vtable = &JVMAssemblerVtable
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
1335
src/assemble/LinuxGASAssembler.c
Normal file
1335
src/assemble/LinuxGASAssembler.c
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -146,7 +146,7 @@ static int AsCalcOffset(int Type) {
|
||||||
* @return the highest available label number
|
* @return the highest available label number
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
int NewLabel(void) {
|
static int NewLabel(void) {
|
||||||
static int id = 1;
|
static int id = 1;
|
||||||
return id++;
|
return id++;
|
||||||
}
|
}
|
||||||
|
@ -1273,7 +1273,7 @@ static int AssembleTree(struct ASTNode* Node, int Register, int LoopBeginLabel,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct AssemblerVtable Win32ASMVtable = {
|
static const struct AssemblerVtable Win32GASVtable = {
|
||||||
.AssembleTree = AssembleTree,
|
.AssembleTree = AssembleTree,
|
||||||
.AsAdd = AsAdd,
|
.AsAdd = AsAdd,
|
||||||
.AsAddr = AsAddr,
|
.AsAddr = AsAddr,
|
||||||
|
@ -1331,8 +1331,8 @@ static const struct AssemblerVtable Win32ASMVtable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct AssemblerModule Win32ASMModule = {
|
static struct AssemblerModule Win32ASMModule = {
|
||||||
.name = "Win32 GAS ASM",
|
.name = "Win32",
|
||||||
.vtable = &Win32ASMVtable
|
.vtable = &Win32GASVtable
|
||||||
};
|
};
|
||||||
|
|
||||||
void RegisterWin32ASM() {
|
void RegisterWin32ASM() {
|
Loading…
Reference in New Issue
Block a user