add skill and some adjustments
This commit is contained in:
@@ -182,6 +182,24 @@ IA_ U8 align_pow2(U8 x, U8 b) {
|
||||
return ((x + b - 1) & (~(b - 1)));
|
||||
}
|
||||
|
||||
#if 0
|
||||
#pragma clang optimize off
|
||||
// TODO(Ed): Replace these later (only matters if CRT is not used)
|
||||
void* memset(void* dest, int c, U8 count) {
|
||||
U1* bytes = (U1*)dest;
|
||||
while (count--) *bytes++ = (U1)c;
|
||||
return dest;
|
||||
}
|
||||
|
||||
void* memcpy(void* dest, const void* src, U8 count) {
|
||||
U1* d = (U1*)dest;
|
||||
const U1* s = (const U1*)src;
|
||||
while (count--) *d++ = *s++;
|
||||
return dest;
|
||||
}
|
||||
#pragma clang optimize on
|
||||
#endif
|
||||
|
||||
IA_ U8 mem_copy (U8 dest, U8 src, U8 len) { return (U8)(__builtin_memcpy ((void*)dest, (void const*)src, len)); }
|
||||
IA_ U8 mem_copy_overlapping(U8 dest, U8 src, U8 len) { return (U8)(__builtin_memmove((void*)dest, (void const*)src, len)); }
|
||||
IA_ U8 mem_fill (U8 dest, U8 value, U8 len) { return (U8)(__builtin_memset ((void*)dest, (int) value, len)); }
|
||||
|
||||
109
attempt_1/main.c
109
attempt_1/main.c
@@ -93,21 +93,6 @@ typedef struct {
|
||||
global DictEntry dict[256];
|
||||
global U8 dict_count = 0;
|
||||
|
||||
#pragma clang optimize off
|
||||
void* memset(void* dest, int c, U8 count) {
|
||||
U1* bytes = (U1*)dest;
|
||||
while (count--) *bytes++ = (U1)c;
|
||||
return dest;
|
||||
}
|
||||
|
||||
void* memcpy(void* dest, const void* src, U8 count) {
|
||||
U1* d = (U1*)dest;
|
||||
const U1* s = (const U1*)src;
|
||||
while (count--) *d++ = *s++;
|
||||
return dest;
|
||||
}
|
||||
#pragma clang optimize on
|
||||
|
||||
IA_ void scatter(U4 token, const char* anno_str) {
|
||||
if (tape_arena.used + sizeof(U4) <= tape_arena.capacity && anno_arena.used + sizeof(U8) <= anno_arena.capacity) {
|
||||
U4*r ptr = C_(U4*r, tape_arena.start + tape_arena.used);
|
||||
@@ -578,54 +563,54 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam) {
|
||||
|
||||
// Render VM State
|
||||
ms_set_text_color(hdc, 0x00FFFFFF);
|
||||
char jit_str[64] = "Mode: Incremental | JIT Size: 0x000 bytes";
|
||||
if (run_full) mem_copy(u8_(jit_str + 6), u8_("Full "), 11);
|
||||
u64_to_hex(code_arena.used, jit_str + 32, 3);
|
||||
ms_text_out_a(hdc, 40, 520, jit_str, 41);
|
||||
|
||||
char state_str[64] = "RAX: 00000000 | RDX: 00000000";
|
||||
u64_to_hex(vm_rax, state_str + 5, 8);
|
||||
u64_to_hex(vm_rdx, state_str + 21, 8);
|
||||
ms_set_text_color(hdc, 0x0094BAA1); // Number green
|
||||
ms_text_out_a(hdc, 40, 550, state_str, 29);
|
||||
char jit_str[64] = "Mode: Incremental | JIT Size: 0x000 bytes";
|
||||
if (run_full) mem_copy(u8_(jit_str + 6), u8_("Full "), 11);
|
||||
u64_to_hex(code_arena.used, jit_str + 32, 3);
|
||||
ms_text_out_a(hdc, 40, 520, jit_str, 41);
|
||||
|
||||
// HUD: Display Current Token Meaning
|
||||
if (tape_count > 0 && cursor_idx < tape_count) {
|
||||
U4 cur_tag = UNPACK_TAG(tape_ptr[cursor_idx]);
|
||||
const char* tag_name = tag_names[cur_tag];
|
||||
U4 cur_color = tag_colors[cur_tag];
|
||||
|
||||
char semantics_str[64] = "Current Tag: ";
|
||||
U4 name_len = 0;
|
||||
while (tag_name[name_len]) {
|
||||
semantics_str[13 + name_len] = tag_name[name_len];
|
||||
name_len++;
|
||||
}
|
||||
semantics_str[13 + name_len] = '\0';
|
||||
|
||||
ms_set_text_color(hdc, cur_color);
|
||||
ms_text_out_a(hdc, 40, 580, semantics_str, 13 + name_len);
|
||||
}
|
||||
|
||||
ms_set_text_color(hdc, 0x00C8C8C8);
|
||||
ms_text_out_a(hdc, 400, 520, "Global Memory (Contiguous Array):", 33);
|
||||
for (int i=0; i<4; i++) {
|
||||
char glob_str[32] = "[0]: 00000000";
|
||||
glob_str[1] = '0' + i;
|
||||
u64_to_hex(vm_globals[i], glob_str + 5, 8);
|
||||
ms_set_text_color(hdc, 0x00D6A454); // Soft blue
|
||||
ms_text_out_a(hdc, 400, 550 + (i * 25), glob_str, 13);
|
||||
}
|
||||
|
||||
// Print Log
|
||||
ms_set_text_color(hdc, 0x00C8C8C8);
|
||||
ms_text_out_a(hdc, 750, 520, "Print Log:", 10);
|
||||
for (int i=0; i<log_count && i<4; i++) {
|
||||
char log_str[32] = "00000000";
|
||||
u64_to_hex(log_buffer[i], log_str, 8);
|
||||
ms_set_text_color(hdc, 0x0094BAA1);
|
||||
ms_text_out_a(hdc, 750, 550 + (i * 25), log_str, 8);
|
||||
}
|
||||
char state_str[64] = "RAX: 00000000 | RDX: 00000000";
|
||||
u64_to_hex(vm_rax, state_str + 5, 8);
|
||||
u64_to_hex(vm_rdx, state_str + 21, 8);
|
||||
ms_set_text_color(hdc, 0x0094BAA1); // Number green
|
||||
ms_text_out_a(hdc, 40, 550, state_str, 29);
|
||||
|
||||
// HUD: Display Current Token Meaning
|
||||
if (tape_count > 0 && cursor_idx < tape_count) {
|
||||
U4 cur_tag = UNPACK_TAG(tape_ptr[cursor_idx]);
|
||||
const char* tag_name = tag_names[cur_tag];
|
||||
U4 cur_color = tag_colors[cur_tag];
|
||||
|
||||
char semantics_str[64] = "Current Tag: ";
|
||||
U4 name_len = 0;
|
||||
while (tag_name[name_len]) {
|
||||
semantics_str[13 + name_len] = tag_name[name_len];
|
||||
name_len++;
|
||||
}
|
||||
semantics_str[13 + name_len] = '\0';
|
||||
|
||||
ms_set_text_color(hdc, cur_color);
|
||||
ms_text_out_a(hdc, 40, 580, semantics_str, 13 + name_len);
|
||||
}
|
||||
|
||||
ms_set_text_color(hdc, 0x00C8C8C8);
|
||||
ms_text_out_a(hdc, 400, 520, "Global Memory (Contiguous Array):", 33);
|
||||
for (int i=0; i<4; i++) {
|
||||
char glob_str[32] = "[0]: 00000000";
|
||||
glob_str[1] = '0' + i;
|
||||
u64_to_hex(vm_globals[i], glob_str + 5, 8);
|
||||
ms_set_text_color(hdc, 0x00D6A454); // Soft blue
|
||||
ms_text_out_a(hdc, 400, 550 + (i * 25), glob_str, 13);
|
||||
}
|
||||
|
||||
// Print Log
|
||||
ms_set_text_color(hdc, 0x00C8C8C8);
|
||||
ms_text_out_a(hdc, 750, 520, "Print Log:", 10);
|
||||
for (int i=0; i<log_count && i<4; i++) {
|
||||
char log_str[32] = "00000000";
|
||||
u64_to_hex(log_buffer[i], log_str, 8);
|
||||
ms_set_text_color(hdc, 0x0094BAA1);
|
||||
ms_text_out_a(hdc, 750, 550 + (i * 25), log_str, 8);
|
||||
}
|
||||
ms_select_object(hdc, hOldFont);
|
||||
ms_delete_object(hBgBrush);
|
||||
ms_delete_object(hBrushEdit);
|
||||
|
||||
Reference in New Issue
Block a user