Get rid of memcopies in codegen, improve Multimedia
This commit is contained in:
@@ -545,7 +545,7 @@ gen_ast(Ast *ast){
|
||||
|
||||
int i = 0;
|
||||
For(node->expr){
|
||||
genln("memcpy(&%Q.m%d, ", var_name, i);
|
||||
genln("CORE_MemoryCopy(&%Q.m%d, ", var_name, i);
|
||||
if(!is_array(it->resolved_type)) gen("&");
|
||||
gen("(");
|
||||
gen_expr(it);
|
||||
@@ -761,7 +761,7 @@ gen_ast(Ast *ast){
|
||||
|
||||
int i = 0;
|
||||
For(node->vars){
|
||||
gen("memcpy((void *)&%Q, (void *)&%Q.m%d, sizeof(%Q));", it->name, var_name, i++, it->name);
|
||||
gen("CORE_MemoryCopy((void *)&%Q, (void *)&%Q.m%d, sizeof(%Q));", it->name, var_name, i++, it->name);
|
||||
}
|
||||
BREAK();
|
||||
}
|
||||
@@ -785,7 +785,6 @@ compile_to_c_code(){
|
||||
gen(R"==(
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#define CORE_Assert(x) do{if(!(x))__debugbreak();}while(0)
|
||||
#define CORE_AssertMessage(x,...) CORE_Assert(x)
|
||||
#define CORE_BufferSize(x) (sizeof(x)/sizeof((x)[0]))
|
||||
@@ -793,6 +792,16 @@ typedef struct String{
|
||||
uint8_t *str;
|
||||
int64_t len;
|
||||
}String;
|
||||
|
||||
static void
|
||||
CORE_MemoryCopy(void *dst, void *src, size_t size){
|
||||
uint8_t *d = (uint8_t*)dst;
|
||||
uint8_t *s = (uint8_t*)src;
|
||||
for(size_t i = 0; i < size; i++){
|
||||
d[i] = s[i];
|
||||
}
|
||||
}
|
||||
|
||||
)==");
|
||||
|
||||
// Generate struct forward decls
|
||||
|
||||
Reference in New Issue
Block a user