cosmopolitan/third_party/chibicc/kw.gperf
Justine Tunney a988896048 Add atomics to chibicc
This change also fixes #434 and makes the chibicc assembler better.
2022-06-20 03:08:00 -07:00

135 lines
6 KiB
Text

%{
#include "libc/str/str.h"
#include "third_party/chibicc/kw.h"
%}
%compare-strncmp
%language=ANSI-C
%readonly-tables
%struct-type
%define lookup-function-name LookupKw
struct thatispacked KwSlot { char *name; unsigned char code; };
%%
if, KW_IF
struct, KW_STRUCT
return, KW_RETURN
case, KW_CASE
static, KW_STATIC
void, KW_VOID
char, KW_CHAR
else, KW_ELSE
for, KW_FOR
do, KW_DO
sizeof, KW_SIZEOF
unsigned, KW_UNSIGNED
long, KW_LONG
while, KW_WHILE
union, KW_UNION
switch, KW_SWITCH
double, KW_DOUBLE
const, KW_CONST
float, KW_FLOAT
short, KW_SHORT
signed, KW_SIGNED
break, KW_BREAK
enum, KW_ENUM
continue, KW_CONTINUE
include, KW_INCLUDE
ifdef, KW_IFDEF
ifndef, KW_IFNDEF
define, KW_DEFINE
defined, KW_DEFINED
asm, KW_ASM
default, KW_DEFAULT
auto, KW_AUTO
register, KW_REGISTER
__attribute__, KW___ATTRIBUTE__
_Noreturn, KW__NORETURN
elif, KW_ELIF
endif, KW_ENDIF
error, KW_ERROR
extern, KW_EXTERN
goto, KW_GOTO
include_next, KW_INCLUDE_NEXT
inline, KW_INLINE
int, KW_INT
line, KW_LINE
pragma, KW_PRAGMA
restrict, KW_RESTRICT
strchr, KW_STRCHR
strlen, KW_STRLEN
strpbrk, KW_STRPBRK
strstr, KW_STRSTR
typedef, KW_TYPEDEF
typeof, KW_TYPEOF
undef, KW_UNDEF
volatile, KW_VOLATILE
_Alignas, KW__ALIGNAS
_Alignof, KW__ALIGNOF
_Atomic, KW__ATOMIC
_Bool, KW__BOOL
_Generic, KW__GENERIC
_Static_assert, KW__STATIC_ASSERT
_Thread_local, KW__THREAD_LOCAL
__VA_OPT__, KW___VA_OPT__
__alignof__, KW___ALIGNOF__
__asm__, KW___ASM__
__inline, KW_INLINE
__int128, KW___INT128
__restrict, KW_RESTRICT
__restrict__, KW_RESTRICT
__thread, KW__THREAD_LOCAL
__typeof, KW_TYPEOF
__builtin_add_overflow, KW___BUILTIN_ADD_OVERFLOW
__builtin_assume_aligned, KW___BUILTIN_ASSUME_ALIGNED
__builtin_constant_p, KW___BUILTIN_CONSTANT_P
__builtin_expect, KW___BUILTIN_EXPECT
__builtin_ffs, KW___BUILTIN_FFS
__builtin_ffsl, KW___BUILTIN_FFSL
__builtin_ffsll, KW___BUILTIN_FFSLL
__builtin_fpclassify, KW___BUILTIN_FPCLASSIFY
__builtin_mul_overflow, KW___BUILTIN_MUL_OVERFLOW
__builtin_neg_overflow, KW___BUILTIN_NEG_OVERFLOW
__builtin_offsetof, KW___BUILTIN_OFFSETOF
__builtin_popcount, KW___BUILTIN_POPCOUNT
__builtin_popcountl, KW___BUILTIN_POPCOUNTL
__builtin_popcountll, KW___BUILTIN_POPCOUNTLL
__builtin_reg_class, KW___BUILTIN_REG_CLASS
__builtin_strchr, KW___BUILTIN_STRCHR
__builtin_strlen, KW___BUILTIN_STRLEN
__builtin_strpbrk, KW___BUILTIN_STRPBRK
__builtin_strstr, KW___BUILTIN_STRSTR
__builtin_sub_overflow, KW___BUILTIN_SUB_OVERFLOW
__builtin_types_compatible_p, KW___BUILTIN_TYPES_COMPATIBLE_P
"(", KW_LP
")", KW_RP
"{", KW_LB
"}", KW_RB
"+", KW_PLUS
"-", KW_MINUS
"&", KW_AMP
"*", KW_STAR
"!", KW_EXCLAIM
"~", KW_TILDE
"++", KW_INCREMENT
"--", KW_DECREMENT
"&&", KW_LOGAND
"||", KW_LOGOR
"->", KW_ARROW
".", KW_DOT
__atomic_load, KW___ATOMIC_LOAD
__atomic_load_n, KW___ATOMIC_LOAD_N
__atomic_store, KW___ATOMIC_STORE
__atomic_store_n, KW___ATOMIC_STORE_N
__atomic_clear, KW___ATOMIC_CLEAR
__atomic_fetch_add, KW___ATOMIC_FETCH_ADD
__atomic_fetch_sub, KW___ATOMIC_FETCH_SUB
__atomic_fetch_and, KW___ATOMIC_FETCH_AND
__atomic_fetch_xor, KW___ATOMIC_FETCH_XOR
__atomic_fetch_or, KW___ATOMIC_FETCH_OR
__atomic_test_and_set, KW___ATOMIC_TEST_AND_SET
__sync_lock_test_and_set, KW___SYNC_LOCK_TEST_AND_SET
__sync_lock_release, KW___SYNC_LOCK_RELEASE
__builtin_ia32_movntdq, KW___BUILTIN_IA32_MOVNTDQ
__builtin_ia32_pmovmskb128, KW___BUILTIN_IA32_PMOVMSKB128
__atomic_compare_exchange_n, KW___ATOMIC_COMPARE_EXCHANGE_N
__atomic_exchange_n, KW___ATOMIC_EXCHANGE_N