Running clang-format on alloy.
All except x64_sequences, which needs work.
This commit is contained in:
@@ -17,21 +17,19 @@
|
||||
#include <alloy/hir/label.h>
|
||||
#include <alloy/runtime/runtime.h>
|
||||
|
||||
using namespace alloy;
|
||||
using namespace alloy::backend;
|
||||
using namespace alloy::backend::ivm;
|
||||
using namespace alloy::hir;
|
||||
using namespace alloy::runtime;
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
using alloy::hir::HIRBuilder;
|
||||
using alloy::runtime::Function;
|
||||
using alloy::runtime::FunctionInfo;
|
||||
|
||||
IVMAssembler::IVMAssembler(Backend* backend) :
|
||||
source_map_arena_(128 * 1024),
|
||||
Assembler(backend) {
|
||||
}
|
||||
IVMAssembler::IVMAssembler(Backend* backend)
|
||||
: source_map_arena_(128 * 1024), Assembler(backend) {}
|
||||
|
||||
IVMAssembler::~IVMAssembler() {
|
||||
alloy::tracing::WriteEvent(EventType::AssemblerDeinit({
|
||||
}));
|
||||
alloy::tracing::WriteEvent(EventType::AssemblerDeinit({}));
|
||||
}
|
||||
|
||||
int IVMAssembler::Initialize() {
|
||||
@@ -40,8 +38,7 @@ int IVMAssembler::Initialize() {
|
||||
return result;
|
||||
}
|
||||
|
||||
alloy::tracing::WriteEvent(EventType::AssemblerInit({
|
||||
}));
|
||||
alloy::tracing::WriteEvent(EventType::AssemblerInit({}));
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -53,10 +50,10 @@ void IVMAssembler::Reset() {
|
||||
Assembler::Reset();
|
||||
}
|
||||
|
||||
int IVMAssembler::Assemble(
|
||||
FunctionInfo* symbol_info, HIRBuilder* builder,
|
||||
uint32_t debug_info_flags, runtime::DebugInfo* debug_info,
|
||||
Function** out_function) {
|
||||
int IVMAssembler::Assemble(FunctionInfo* symbol_info, HIRBuilder* builder,
|
||||
uint32_t debug_info_flags,
|
||||
runtime::DebugInfo* debug_info,
|
||||
Function** out_function) {
|
||||
IVMFunction* fn = new IVMFunction(symbol_info);
|
||||
fn->set_debug_info(debug_info);
|
||||
|
||||
@@ -89,13 +86,13 @@ int IVMAssembler::Assemble(
|
||||
|
||||
auto block = builder->first_block();
|
||||
while (block) {
|
||||
Label* label = block->label_head;
|
||||
auto label = block->label_head;
|
||||
while (label) {
|
||||
label->tag = (void*)(0x80000000 | ctx.intcode_count);
|
||||
label = label->next;
|
||||
}
|
||||
|
||||
Instr* i = block->instr_head;
|
||||
auto i = block->instr_head;
|
||||
while (i) {
|
||||
int result = TranslateIntCodes(ctx, i);
|
||||
i = i->next;
|
||||
@@ -108,7 +105,8 @@ int IVMAssembler::Assemble(
|
||||
// Fixup label references.
|
||||
LabelRef* label_ref = ctx.label_ref_head;
|
||||
while (label_ref) {
|
||||
label_ref->instr->src1_reg = (uint32_t)(intptr_t)label_ref->label->tag & ~0x80000000;
|
||||
label_ref->instr->src1_reg =
|
||||
(uint32_t)(intptr_t)label_ref->label->tag & ~0x80000000;
|
||||
label_ref = label_ref->next;
|
||||
}
|
||||
|
||||
@@ -117,3 +115,7 @@ int IVMAssembler::Assemble(
|
||||
*out_function = fn;
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
@@ -14,14 +14,12 @@
|
||||
|
||||
#include <alloy/backend/assembler.h>
|
||||
|
||||
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
|
||||
class IVMAssembler : public Assembler {
|
||||
public:
|
||||
public:
|
||||
IVMAssembler(Backend* backend);
|
||||
virtual ~IVMAssembler();
|
||||
|
||||
@@ -29,21 +27,19 @@ public:
|
||||
|
||||
virtual void Reset();
|
||||
|
||||
virtual int Assemble(
|
||||
runtime::FunctionInfo* symbol_info, hir::HIRBuilder* builder,
|
||||
uint32_t debug_info_flags, runtime::DebugInfo* debug_info,
|
||||
runtime::Function** out_function);
|
||||
virtual int Assemble(runtime::FunctionInfo* symbol_info,
|
||||
hir::HIRBuilder* builder, uint32_t debug_info_flags,
|
||||
runtime::DebugInfo* debug_info,
|
||||
runtime::Function** out_function);
|
||||
|
||||
private:
|
||||
Arena intcode_arena_;
|
||||
Arena source_map_arena_;
|
||||
Arena scratch_arena_;
|
||||
private:
|
||||
Arena intcode_arena_;
|
||||
Arena source_map_arena_;
|
||||
Arena scratch_arena_;
|
||||
};
|
||||
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
|
||||
#endif // ALLOY_BACKEND_IVM_IVM_ASSEMBLER_H_
|
||||
|
||||
@@ -13,20 +13,15 @@
|
||||
#include <alloy/backend/ivm/ivm_stack.h>
|
||||
#include <alloy/backend/ivm/tracing.h>
|
||||
|
||||
using namespace alloy;
|
||||
using namespace alloy::backend;
|
||||
using namespace alloy::backend::ivm;
|
||||
using namespace alloy::runtime;
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
using alloy::runtime::Runtime;
|
||||
|
||||
IVMBackend::IVMBackend(Runtime* runtime) :
|
||||
Backend(runtime) {
|
||||
}
|
||||
IVMBackend::IVMBackend(Runtime* runtime) : Backend(runtime) {}
|
||||
|
||||
IVMBackend::~IVMBackend() {
|
||||
alloy::tracing::WriteEvent(EventType::Deinit({
|
||||
}));
|
||||
}
|
||||
IVMBackend::~IVMBackend() { alloy::tracing::WriteEvent(EventType::Deinit({})); }
|
||||
|
||||
int IVMBackend::Initialize() {
|
||||
int result = Backend::Initialize();
|
||||
@@ -35,34 +30,28 @@ int IVMBackend::Initialize() {
|
||||
}
|
||||
|
||||
machine_info_.register_sets[0] = {
|
||||
0,
|
||||
"gpr",
|
||||
MachineInfo::RegisterSet::INT_TYPES,
|
||||
16,
|
||||
0, "gpr", MachineInfo::RegisterSet::INT_TYPES, 16,
|
||||
};
|
||||
machine_info_.register_sets[1] = {
|
||||
1,
|
||||
"vec",
|
||||
MachineInfo::RegisterSet::FLOAT_TYPES |
|
||||
MachineInfo::RegisterSet::VEC_TYPES,
|
||||
16,
|
||||
1, "vec", MachineInfo::RegisterSet::FLOAT_TYPES |
|
||||
MachineInfo::RegisterSet::VEC_TYPES,
|
||||
16,
|
||||
};
|
||||
|
||||
alloy::tracing::WriteEvent(EventType::Init({
|
||||
}));
|
||||
alloy::tracing::WriteEvent(EventType::Init({}));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void* IVMBackend::AllocThreadData() {
|
||||
return new IVMStack();
|
||||
}
|
||||
void* IVMBackend::AllocThreadData() { return new IVMStack(); }
|
||||
|
||||
void IVMBackend::FreeThreadData(void* thread_data) {
|
||||
auto stack = (IVMStack*)thread_data;
|
||||
delete stack;
|
||||
}
|
||||
|
||||
Assembler* IVMBackend::CreateAssembler() {
|
||||
return new IVMAssembler(this);
|
||||
}
|
||||
Assembler* IVMBackend::CreateAssembler() { return new IVMAssembler(this); }
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
@@ -14,17 +14,14 @@
|
||||
|
||||
#include <alloy/backend/backend.h>
|
||||
|
||||
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
|
||||
#define ALLOY_HAS_IVM_BACKEND 1
|
||||
|
||||
|
||||
class IVMBackend : public Backend {
|
||||
public:
|
||||
public:
|
||||
IVMBackend(runtime::Runtime* runtime);
|
||||
virtual ~IVMBackend();
|
||||
|
||||
@@ -36,10 +33,8 @@ public:
|
||||
virtual Assembler* CreateAssembler();
|
||||
};
|
||||
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
|
||||
#endif // ALLOY_BACKEND_IVM_IVM_BACKEND_H_
|
||||
|
||||
@@ -14,17 +14,21 @@
|
||||
#include <alloy/runtime/runtime.h>
|
||||
#include <alloy/runtime/thread_state.h>
|
||||
|
||||
using namespace alloy;
|
||||
using namespace alloy::backend;
|
||||
using namespace alloy::backend::ivm;
|
||||
using namespace alloy::runtime;
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
using alloy::runtime::Breakpoint;
|
||||
using alloy::runtime::FunctionInfo;
|
||||
using alloy::runtime::ThreadState;
|
||||
|
||||
IVMFunction::IVMFunction(FunctionInfo* symbol_info) :
|
||||
register_count_(0), intcode_count_(0), intcodes_(0),
|
||||
source_map_count_(0), source_map_(0),
|
||||
Function(symbol_info) {
|
||||
}
|
||||
IVMFunction::IVMFunction(FunctionInfo* symbol_info)
|
||||
: register_count_(0),
|
||||
intcode_count_(0),
|
||||
intcodes_(0),
|
||||
source_map_count_(0),
|
||||
source_map_(0),
|
||||
Function(symbol_info) {}
|
||||
|
||||
IVMFunction::~IVMFunction() {
|
||||
xe_free(intcodes_);
|
||||
@@ -57,8 +61,7 @@ int IVMFunction::AddBreakpointImpl(Breakpoint* breakpoint) {
|
||||
}
|
||||
|
||||
// TEMP breakpoints always overwrite normal ones.
|
||||
if (!i->debug_flags ||
|
||||
breakpoint->type() == Breakpoint::TEMP_TYPE) {
|
||||
if (!i->debug_flags || breakpoint->type() == Breakpoint::TEMP_TYPE) {
|
||||
uint64_t breakpoint_ptr = (uint64_t)breakpoint;
|
||||
i->src2_reg = (uint32_t)breakpoint_ptr;
|
||||
i->src3_reg = (uint32_t)(breakpoint_ptr >> 32);
|
||||
@@ -127,8 +130,8 @@ int IVMFunction::CallImpl(ThreadState* thread_state, uint64_t return_address) {
|
||||
|
||||
volatile int* suspend_flag_address = thread_state->suspend_flag_address();
|
||||
|
||||
// TODO(benvanik): DID_CARRY -- need HIR to set a OPCODE_FLAG_SET_CARRY
|
||||
// or something so the fns can set an ics flag.
|
||||
// TODO(benvanik): DID_CARRY -- need HIR to set a OPCODE_FLAG_SET_CARRY
|
||||
// or something so the fns can set an ics flag.
|
||||
|
||||
#ifdef TRACE_SOURCE_OFFSET
|
||||
size_t source_index = 0;
|
||||
@@ -177,3 +180,7 @@ int IVMFunction::CallImpl(ThreadState* thread_state, uint64_t return_address) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,104 +15,96 @@
|
||||
#include <alloy/hir/instr.h>
|
||||
#include <alloy/hir/opcodes.h>
|
||||
|
||||
namespace alloy { namespace runtime { class ThreadState; } }
|
||||
|
||||
namespace alloy {
|
||||
namespace runtime {
|
||||
class ThreadState;
|
||||
}
|
||||
}
|
||||
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
|
||||
typedef union {
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
uint32_t u32;
|
||||
int64_t i64;
|
||||
uint64_t u64;
|
||||
float f32;
|
||||
double f64;
|
||||
vec128_t v128;
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
uint32_t u32;
|
||||
int64_t i64;
|
||||
uint64_t u64;
|
||||
float f32;
|
||||
double f64;
|
||||
vec128_t v128;
|
||||
} Register;
|
||||
|
||||
|
||||
typedef struct {
|
||||
Register* rf;
|
||||
uint8_t* locals;
|
||||
uint8_t* context;
|
||||
uint8_t* membase;
|
||||
uint8_t* page_table;
|
||||
int8_t did_carry;
|
||||
int8_t did_saturate;
|
||||
Register* rf;
|
||||
uint8_t* locals;
|
||||
uint8_t* context;
|
||||
uint8_t* membase;
|
||||
uint8_t* page_table;
|
||||
int8_t did_carry;
|
||||
int8_t did_saturate;
|
||||
runtime::ThreadState* thread_state;
|
||||
uint64_t return_address;
|
||||
uint64_t call_return_address;
|
||||
uint64_t return_address;
|
||||
uint64_t call_return_address;
|
||||
} IntCodeState;
|
||||
|
||||
|
||||
struct IntCode_s;
|
||||
typedef uint32_t (*IntCodeFn)(
|
||||
IntCodeState& ics, const struct IntCode_s* i);
|
||||
typedef uint32_t (*IntCodeFn)(IntCodeState& ics, const struct IntCode_s* i);
|
||||
|
||||
#define IA_RETURN 0xA0000000
|
||||
#define IA_NEXT 0xB0000000
|
||||
|
||||
#define IA_NEXT 0xB0000000
|
||||
|
||||
typedef struct IntCode_s {
|
||||
IntCodeFn intcode_fn;
|
||||
uint16_t flags;
|
||||
uint16_t debug_flags;
|
||||
uint16_t flags;
|
||||
uint16_t debug_flags;
|
||||
|
||||
uint32_t dest_reg;
|
||||
uint32_t dest_reg;
|
||||
union {
|
||||
struct {
|
||||
uint32_t src1_reg;
|
||||
uint32_t src2_reg;
|
||||
uint32_t src3_reg;
|
||||
uint32_t src1_reg;
|
||||
uint32_t src2_reg;
|
||||
uint32_t src3_reg;
|
||||
// <4 bytes available>
|
||||
};
|
||||
struct {
|
||||
Register constant;
|
||||
Register constant;
|
||||
};
|
||||
};
|
||||
|
||||
// debugging info/etc
|
||||
} IntCode;
|
||||
|
||||
|
||||
typedef struct LabelRef_s {
|
||||
hir::Label* label;
|
||||
IntCode* instr;
|
||||
IntCode* instr;
|
||||
LabelRef_s* next;
|
||||
} LabelRef;
|
||||
|
||||
|
||||
typedef struct SourceMapEntry_s {
|
||||
uint64_t source_offset;
|
||||
uint64_t intcode_index;
|
||||
uint64_t source_offset;
|
||||
uint64_t intcode_index;
|
||||
} SourceMapEntry;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint32_t register_count;
|
||||
size_t intcode_count;
|
||||
Arena* intcode_arena;
|
||||
size_t source_map_count;
|
||||
Arena* source_map_arena;
|
||||
Arena* scratch_arena;
|
||||
uint32_t register_count;
|
||||
size_t intcode_count;
|
||||
Arena* intcode_arena;
|
||||
size_t source_map_count;
|
||||
Arena* source_map_arena;
|
||||
Arena* scratch_arena;
|
||||
LabelRef* label_ref_head;
|
||||
size_t stack_size;
|
||||
size_t stack_size;
|
||||
} TranslationContext;
|
||||
|
||||
|
||||
int TranslateIntCodes(TranslationContext& ctx, hir::Instr* i);
|
||||
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
|
||||
#endif // ALLOY_BACKEND_IVM_INTCODE_H_
|
||||
|
||||
@@ -9,15 +9,12 @@
|
||||
|
||||
#include <alloy/backend/ivm/ivm_stack.h>
|
||||
|
||||
using namespace alloy;
|
||||
using namespace alloy::backend;
|
||||
using namespace alloy::backend::ivm;
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
|
||||
IVMStack::IVMStack() :
|
||||
chunk_size_(2 * 1024 * 1024),
|
||||
head_chunk_(NULL), active_chunk_(NULL) {
|
||||
}
|
||||
IVMStack::IVMStack()
|
||||
: chunk_size_(2 * 1024 * 1024), head_chunk_(NULL), active_chunk_(NULL) {}
|
||||
|
||||
IVMStack::~IVMStack() {
|
||||
Chunk* chunk = head_chunk_;
|
||||
@@ -35,7 +32,7 @@ Register* IVMStack::Alloc(size_t register_count) {
|
||||
if (active_chunk_->capacity - active_chunk_->offset < size) {
|
||||
Chunk* next = active_chunk_->next;
|
||||
if (!next) {
|
||||
XEASSERT(size < chunk_size_); // need to support larger chunks
|
||||
XEASSERT(size < chunk_size_); // need to support larger chunks
|
||||
next = new Chunk(chunk_size_);
|
||||
next->prev = active_chunk_;
|
||||
active_chunk_->next = next;
|
||||
@@ -66,9 +63,8 @@ void IVMStack::Free(size_t register_count) {
|
||||
}
|
||||
}
|
||||
|
||||
IVMStack::Chunk::Chunk(size_t chunk_size) :
|
||||
prev(NULL), next(NULL),
|
||||
capacity(chunk_size), buffer(0), offset(0) {
|
||||
IVMStack::Chunk::Chunk(size_t chunk_size)
|
||||
: prev(NULL), next(NULL), capacity(chunk_size), buffer(0), offset(0) {
|
||||
buffer = (uint8_t*)xe_malloc(capacity);
|
||||
}
|
||||
|
||||
@@ -77,3 +73,7 @@ IVMStack::Chunk::~Chunk() {
|
||||
xe_free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
@@ -14,44 +14,40 @@
|
||||
|
||||
#include <alloy/backend/ivm/ivm_intcode.h>
|
||||
|
||||
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
|
||||
class IVMStack {
|
||||
public:
|
||||
public:
|
||||
IVMStack();
|
||||
~IVMStack();
|
||||
|
||||
Register* Alloc(size_t register_count);
|
||||
void Free(size_t register_count);
|
||||
|
||||
private:
|
||||
private:
|
||||
class Chunk {
|
||||
public:
|
||||
public:
|
||||
Chunk(size_t chunk_size);
|
||||
~Chunk();
|
||||
|
||||
Chunk* prev;
|
||||
Chunk* next;
|
||||
Chunk* prev;
|
||||
Chunk* next;
|
||||
|
||||
size_t capacity;
|
||||
uint8_t* buffer;
|
||||
size_t offset;
|
||||
size_t capacity;
|
||||
uint8_t* buffer;
|
||||
size_t offset;
|
||||
};
|
||||
|
||||
private:
|
||||
size_t chunk_size_;
|
||||
Chunk* head_chunk_;
|
||||
Chunk* active_chunk_;
|
||||
private:
|
||||
size_t chunk_size_;
|
||||
Chunk* head_chunk_;
|
||||
Chunk* active_chunk_;
|
||||
};
|
||||
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
|
||||
#endif // ALLOY_BACKEND_IVM_IVM_STACK_H_
|
||||
|
||||
@@ -12,24 +12,20 @@
|
||||
|
||||
#include <alloy/backend/tracing.h>
|
||||
|
||||
|
||||
namespace alloy {
|
||||
namespace backend {
|
||||
namespace ivm {
|
||||
|
||||
const uint32_t ALLOY_BACKEND_IVM =
|
||||
alloy::backend::EventType::ALLOY_BACKEND_IVM;
|
||||
|
||||
const uint32_t ALLOY_BACKEND_IVM = alloy::backend::EventType::ALLOY_BACKEND_IVM;
|
||||
|
||||
class EventType {
|
||||
public:
|
||||
public:
|
||||
enum {
|
||||
ALLOY_BACKEND_IVM_INIT = ALLOY_BACKEND_IVM | (1),
|
||||
ALLOY_BACKEND_IVM_DEINIT = ALLOY_BACKEND_IVM | (2),
|
||||
|
||||
ALLOY_BACKEND_IVM_ASSEMBLER = ALLOY_BACKEND_IVM | (1 << 20),
|
||||
ALLOY_BACKEND_IVM_ASSEMBLER_INIT = ALLOY_BACKEND_IVM_ASSEMBLER | (1),
|
||||
ALLOY_BACKEND_IVM_ASSEMBLER_DEINIT = ALLOY_BACKEND_IVM_ASSEMBLER | (2),
|
||||
ALLOY_BACKEND_IVM_INIT = ALLOY_BACKEND_IVM | (1),
|
||||
ALLOY_BACKEND_IVM_DEINIT = ALLOY_BACKEND_IVM | (2),
|
||||
ALLOY_BACKEND_IVM_ASSEMBLER = ALLOY_BACKEND_IVM | (1 << 20),
|
||||
ALLOY_BACKEND_IVM_ASSEMBLER_INIT = ALLOY_BACKEND_IVM_ASSEMBLER | (1),
|
||||
ALLOY_BACKEND_IVM_ASSEMBLER_DEINIT = ALLOY_BACKEND_IVM_ASSEMBLER | (2),
|
||||
};
|
||||
|
||||
typedef struct Init_s {
|
||||
@@ -47,10 +43,8 @@ public:
|
||||
} AssemblerDeinit;
|
||||
};
|
||||
|
||||
|
||||
} // namespace ivm
|
||||
} // namespace backend
|
||||
} // namespace alloy
|
||||
|
||||
|
||||
#endif // ALLOY_BACKEND_IVM_TRACING_H_
|
||||
|
||||
Reference in New Issue
Block a user