Skip to content

Commit

Permalink
keep moving code and making a big mess of the namespace :|
Browse files Browse the repository at this point in the history
  • Loading branch information
nic-donaldson committed Jun 28, 2020
1 parent a800d0f commit 5f4304c
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 109 deletions.
12 changes: 2 additions & 10 deletions include/EXTLLVM.h
Expand Up @@ -46,8 +46,6 @@ struct _llvm_callback_struct_ {
llvm_zone_t* zone;
};



extern "C"
{
void llvm_destroy_zone_after_delay(llvm_zone_t* zone, uint64_t delay);
Expand All @@ -62,17 +60,11 @@ extern "C"
EXPORT int64_t imp_rand1_i64(int64_t a);
}

// this added for dodgy continuations support

namespace extemp {
namespace EXTLLVM {



void initLLVM();

EXPORT const char* llvm_disassemble(const unsigned char* Code, int Syntax);

}

}
} // namespace EXTLLVM
} // namespace extemp
23 changes: 19 additions & 4 deletions include/EXTZONES.h
Expand Up @@ -31,7 +31,7 @@ struct llvm_zone_stack
llvm_zone_stack* tail;
};

struct closure_address_table;


extern THREAD_LOCAL llvm_zone_stack* tls_llvm_zone_stack;
extern THREAD_LOCAL uint64_t tls_llvm_zone_stacksize;
Expand All @@ -52,9 +52,24 @@ llvm_zone_t* llvm_peek_zone_stack();

EXPORT llvm_zone_t* llvm_pop_zone_stack();

inline void llvm_threads_inc_zone_stacksize();
inline void llvm_threads_dec_zone_stacksize();
inline uint64_t llvm_threads_get_zone_stacksize();
void llvm_threads_inc_zone_stacksize();
void llvm_threads_dec_zone_stacksize();
uint64_t llvm_threads_get_zone_stacksize();

// things that were not in the header before:
// or in the namespace
EXPORT void llvm_zone_print(llvm_zone_t* zone);
EXPORT uint64_t llvm_zone_ptr_size(void* ptr);
EXPORT bool llvm_zone_copy_ptr(void* ptr1, void* ptr2);
EXPORT bool llvm_ptr_in_zone(llvm_zone_t* zone, void* ptr);

EXPORT void* llvm_zone_malloc_from_current_zone(uint64_t size);
EXPORT bool llvm_ptr_in_current_zone(void* ptr);
EXPORT llvm_zone_t* llvm_peek_zone_stack_extern();
EXPORT void llvm_push_zone_stack_extern(llvm_zone_t* Zone);
EXPORT llvm_zone_t* llvm_zone_create_extern(uint64_t Size);

EXPORT llvm_zone_t* llvm_zone_callback_setup();

}
}
94 changes: 1 addition & 93 deletions src/EXTLLVM.cpp
Expand Up @@ -97,8 +97,7 @@

#include "SchemeProcess.h"

#define DEBUG_ZONE_STACK 0
#define DEBUG_ZONE_ALLOC 0
struct closure_address_table;

EXPORT void* malloc16(size_t Size)
{
Expand All @@ -121,7 +120,6 @@ EXPORT void free16(void* Ptr) {
#endif
}

// LLVM RUNTIME ERROR
EXPORT void llvm_runtime_error(int error, void* arg)
{
ascii_error();
Expand All @@ -136,54 +134,6 @@ EXPORT void llvm_runtime_error(int error, void* arg)
return;
}

THREAD_LOCAL llvm_zone_stack* tls_llvm_zone_stack = 0;
THREAD_LOCAL uint64_t tls_llvm_zone_stacksize = 0;

EXPORT void llvm_zone_print(llvm_zone_t* zone)
{
auto tmp(zone);
auto total_size(zone->size);
int64_t segments(1);
while (tmp->memories) {
tmp = tmp->memories;
total_size += tmp->size;
segments++;
}
printf("<MemZone(%p) size(%" PRId64 ") free(%" PRId64 ") segs(%" PRId64 ")>", zone, total_size, (zone->size - zone->offset), segments);
return;
}

EXPORT uint64_t llvm_zone_ptr_size(void* ptr) // could be inline version in llvm (as well)
{
return *(reinterpret_cast<uint64_t*>(ptr) - 1);
}

EXPORT bool llvm_zone_copy_ptr(void* ptr1, void* ptr2)
{
uint64_t size1 = llvm_zone_ptr_size(ptr1);
uint64_t size2 = llvm_zone_ptr_size(ptr2);

if (unlikely(size1 != size2)) {
// printf("Bad LLVM ptr copy - size mismatch setting %p:%lld -> %p:%lld\n", ptr1, size1, ptr2, size2);
return 1;
}
if (unlikely(!size1)) {
// printf("Bad LLVM ptr copy - size mismatch setting %p:%lld -> %p:%lld\n", ptr1, size1, ptr2, size2);
return 1;
}
// printf("zone_copy_ptr: %p,%p,%lld,%lld\n", ptr2, ptr1, size1, size2);
std::memcpy(ptr2, ptr1, size1);
return 0;
}

EXPORT bool llvm_ptr_in_zone(llvm_zone_t* zone, void* ptr)
{
while (unlikely(zone && (ptr < zone->memory || ptr >= reinterpret_cast<char*>(zone->memory) + zone->size))) {
zone = zone->memories;
}
return zone;
}

EXPORT void llvm_schedule_callback(long long time, void* dat)
{
// printf("scheduled callback %lld\n",time);
Expand Down Expand Up @@ -666,48 +616,6 @@ EXPORT void free_after_delay(char* Data, double Delay)



EXPORT void* llvm_zone_malloc_from_current_zone(uint64_t size)
{
return llvm_zone_malloc(llvm_peek_zone_stack(), size);
}

EXPORT bool llvm_ptr_in_current_zone(void* ptr)
{
return llvm_ptr_in_zone(llvm_peek_zone_stack(), ptr);
}

EXPORT llvm_zone_t* llvm_peek_zone_stack_extern()
{
return extemp::EXTLLVM::llvm_peek_zone_stack();
}

EXPORT void llvm_push_zone_stack_extern(llvm_zone_t* Zone)
{
extemp::EXTLLVM::llvm_push_zone_stack(Zone);
}

EXPORT llvm_zone_t* llvm_zone_create_extern(uint64_t Size)
{
return extemp::EXTLLVM::llvm_zone_create(Size);
}

static THREAD_LOCAL llvm_zone_t* tls_llvm_callback_zone = 0;

static inline llvm_zone_t* llvm_threads_get_callback_zone()
{
if (unlikely(!tls_llvm_callback_zone)) {
tls_llvm_callback_zone = llvm_zone_create(1024 * 1024); // default callback zone 1M
}
return tls_llvm_callback_zone;
}

EXPORT llvm_zone_t* llvm_zone_callback_setup()
{
auto zone(llvm_threads_get_callback_zone());
llvm_push_zone_stack(zone);
return llvm_zone_reset(zone);
}

EXPORT void ascii_text_color_extern(int32_t Bold, int32_t Foreground, int32_t Background)
{
ascii_text_color(Bold, Foreground, Background);
Expand Down
93 changes: 91 additions & 2 deletions src/EXTZONES.cpp
@@ -1,9 +1,11 @@
#include "EXTZONES.h"

#include <EXTZONES.h>
#include <EXTMutex.h>

#include <cstring>

THREAD_LOCAL llvm_zone_stack* tls_llvm_zone_stack = 0;
THREAD_LOCAL uint64_t tls_llvm_zone_stacksize = 0;

namespace extemp {
namespace EXTLLVM {

Expand Down Expand Up @@ -181,5 +183,92 @@ uint64_t llvm_threads_get_zone_stacksize() {
return tls_llvm_zone_stacksize;
}

EXPORT void llvm_zone_print(llvm_zone_t* zone)
{
auto tmp(zone);
auto total_size(zone->size);
int64_t segments(1);
while (tmp->memories) {
tmp = tmp->memories;
total_size += tmp->size;
segments++;
}
printf("<MemZone(%p) size(%" PRId64 ") free(%" PRId64 ") segs(%" PRId64 ")>", zone, total_size, (zone->size - zone->offset), segments);
return;
}

EXPORT uint64_t llvm_zone_ptr_size(void* ptr) // could be inline version in llvm (as well)
{
return *(reinterpret_cast<uint64_t*>(ptr) - 1);
}

EXPORT bool llvm_zone_copy_ptr(void* ptr1, void* ptr2)
{
uint64_t size1 = llvm_zone_ptr_size(ptr1);
uint64_t size2 = llvm_zone_ptr_size(ptr2);

if (unlikely(size1 != size2)) {
// printf("Bad LLVM ptr copy - size mismatch setting %p:%lld -> %p:%lld\n", ptr1, size1, ptr2, size2);
return 1;
}
if (unlikely(!size1)) {
// printf("Bad LLVM ptr copy - size mismatch setting %p:%lld -> %p:%lld\n", ptr1, size1, ptr2, size2);
return 1;
}
// printf("zone_copy_ptr: %p,%p,%lld,%lld\n", ptr2, ptr1, size1, size2);
std::memcpy(ptr2, ptr1, size1);
return 0;
}

EXPORT bool llvm_ptr_in_zone(llvm_zone_t* zone, void* ptr)
{
while (unlikely(zone && (ptr < zone->memory || ptr >= reinterpret_cast<char*>(zone->memory) + zone->size))) {
zone = zone->memories;
}
return zone;
}

EXPORT void* llvm_zone_malloc_from_current_zone(uint64_t size)
{
return llvm_zone_malloc(llvm_peek_zone_stack(), size);
}

EXPORT bool llvm_ptr_in_current_zone(void* ptr)
{
return llvm_ptr_in_zone(llvm_peek_zone_stack(), ptr);
}

EXPORT llvm_zone_t* llvm_peek_zone_stack_extern()
{
return llvm_peek_zone_stack();
}

EXPORT void llvm_push_zone_stack_extern(llvm_zone_t* Zone)
{
llvm_push_zone_stack(Zone);
}

EXPORT llvm_zone_t* llvm_zone_create_extern(uint64_t Size)
{
return llvm_zone_create(Size);
}

static THREAD_LOCAL llvm_zone_t* tls_llvm_callback_zone = 0;

static inline llvm_zone_t* llvm_threads_get_callback_zone()
{
if (unlikely(!tls_llvm_callback_zone)) {
tls_llvm_callback_zone = llvm_zone_create(1024 * 1024); // default callback zone 1M
}
return tls_llvm_callback_zone;
}

EXPORT llvm_zone_t* llvm_zone_callback_setup()
{
auto zone(llvm_threads_get_callback_zone());
llvm_push_zone_stack(zone);
return llvm_zone_reset(zone);
}

} // namespace EXTLLVM
} // namespace extemp

0 comments on commit 5f4304c

Please sign in to comment.