Add Conway's Game of Life

This commit is contained in:
Justine Tunney 2020-11-18 08:26:03 -08:00
parent db33973e0a
commit dba7552c1e
22 changed files with 664 additions and 186 deletions

View file

@ -30,7 +30,6 @@
/ @asyncsignalsafe
_Exit: push %rbp
mov %rsp,%rbp
orl $RUNSTATE_TERMINATE,g_runstate(%rip)
#if SupportsWindows()
testb IsWindows()
jz 1f
@ -49,4 +48,3 @@ _Exit: push %rbp
3: .quad 0
.endfn _Exit,globl,protected
.hidden __NR_exit
.hidden g_runstate

View file

@ -39,7 +39,6 @@ abort: push %rbp
mov %rsp,%rbp
and $-16,%rsp
sub $16,%rsp
orl $RUNSTATE_BROKEN,g_runstate(%rip)
testb IsWindows()
jnz 2f
mov SIG_SETMASK,%edi
@ -61,4 +60,3 @@ abort: push %rbp
2: mov $134,%edi # exit(128+SIGABRT) [bash-ism]
call _Exit
.endfn abort,globl,protected
.hidden g_runstate

View file

@ -31,7 +31,6 @@
_construct:
push %rbp
mov %rsp,%rbp
orb $RUNSTATE_INITIALIZED,g_runstate(%rip)
ezlea __init_array_start,ax # static ctors in forward order
.weak __init_array_start # could be called multiple times
ezlea __init_array_end,cx # idempotency recommended

View file

@ -72,7 +72,7 @@ privileged interruptfn void ftrace_hook(void) {
const char *symbol;
struct StackFrame *frame;
LOAD_DEFAULT_RBX();
if (g_symbols && !(g_runstate & RUNSTATE_BROKEN)) {
if (g_symbols) {
frame = __builtin_frame_address(0);
symbol =
&g_symbols->name_base[g_symbols

View file

@ -50,7 +50,6 @@
.section .initprologue,"ax",@progbits
.type _init,@function
.globl _init
.comm g_runstate,4
_init: push %rbp
mov %rsp,%rbp
.profilable

View file

@ -4,20 +4,15 @@
#include "libc/dce.h"
#include "libc/runtime/runtime.h"
#define RUNSTATE_INITIALIZED (1 << 0)
#define RUNSTATE_BROKEN (1 << 1)
#define RUNSTATE_TERMINATE (1 << 2)
#define STACK_CEIL 0x700000000000ul
#define STACK_SIZE FRAMESIZE
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
hidden extern bool _mmap_asan_mode;
hidden extern char **g_freebsdhint;
hidden extern unsigned g_runstate;
hidden extern void *g_stacktop;
extern hidden bool _mmap_asan_mode;
extern hidden char **g_freebsdhint;
extern hidden void *g_stacktop;
void _init(void) hidden;
void _piro(int) hidden;
@ -29,12 +24,6 @@ void _jmpstack(void *, void *, ...) hidden noreturn;
long _setstack(void *, void *, ...) hidden;
int GetDosArgv(const char16_t *, char *, size_t, char **, size_t) hidden;
forceinline void AssertNeverCalledWhileTerminating(void) {
if (!NoDebug() && (g_runstate & RUNSTATE_TERMINATE)) {
abort();
}
}
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* ANSI */