os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit b1f929da477c227276d48b31072df6103b1ca298
parent a730892ab4180d210c6bce747aee00756bb2b23c
Author: erai <erai@omiltem.net>
Date:   Tue, 17 Sep 2024 09:15:15 -0400

bootstrap using the c generator

Diffstat:
Mbootstrap.sh | 2+-
Mcc0.c | 14180+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
2 files changed, 9226 insertions(+), 4956 deletions(-)

diff --git a/bootstrap.sh b/bootstrap.sh @@ -5,7 +5,7 @@ PEG="peg.c peglib.c parsepeg.c" SOURCES="cc1.c type.c parse2.c parse3.c peglib.c as.c decl.c node.c cout.c" # Build the bootstrap compiler from c -gcc -Wall -Wextra -Wno-unused -pedantic -std=c99 ./cc0.c -o cc0 +gcc -std=c99 ./cc0.c -o cc0 # Bootstrap the parser tool ./cc0 ${LIBS} ${PEG} -o peg0 diff --git a/cc0.c b/cc0.c @@ -1,5005 +1,9275 @@ -#define _POSIX_C_SOURCE 1 -#include <stdlib.h> -#include <stdio.h> -#include <fcntl.h> -#include <unistd.h> - -/////////////////////////////////////////////////////////////////////////////// -// Forward Declarations // -/////////////////////////////////////////////////////////////////////////////// - -FILE *fin; -FILE *fout; - -int nc; -unsigned char *filename; -int lineno; -struct node; -struct type; -struct label; -struct fix; -struct sdecl; - -void feed(void); -struct node *type(void); -struct node *stmt_list(void); -struct node *expr(void); -struct label *mklabel(void); -void compute_struct(struct sdecl *s); -int type_sizeof(struct type *t); -void addfixup(struct label *l); - -/////////////////////////////////////////////////////////////////////////////// -// Helpers // -/////////////////////////////////////////////////////////////////////////////// - -void -die(char *msg) -{ - fprintf(stderr, "die(%s:%d): %s\n", filename, lineno, msg); - exit(1); -} - -void -open_output(unsigned char *name) -{ - int fd; - - filename = name; - - if (fout != stdout) { - die("multiple output files"); - } - - unlink((char *)name); - - fd = open((char *)name, 64 + 1, (7 << 6) + (7 << 3) + 7); - if (fd < 0) { - die("failed to open output"); - } - - fout = fdopen(fd, "wb"); -} - -void -open_source(unsigned char *name) -{ - int fd; - - if (fin != stdin) { - die("invalid"); - } - - filename = name; - - fd = open((char *)name, 0, 0); - if (fd < 0) { - die("failed to open file"); - } - - fin = fdopen(fd, "rb"); - lineno = 1; - - nc = fgetc(fin); - feed(); -} - -void -close_source(void) -{ - if (fin != stdin) { - fclose(fin); - fin = stdin; - } - fin = stdin; -} - -// strlen-ish -int -slen(unsigned char *s) -{ - int i; - - i = 0; - while (1) { - if (s[i] == 0) { - return i; - } - - i = i + 1; - } -} - -// strcmp-ish -int -cmp(unsigned char *a, unsigned char *b) -{ - int i; - - i = 0; - while (1) { - if (a[i] > b[i]) { - return 1; - } - - if (a[i] < b[i]) { - return -1; - } - - if (a[i] == 0) { - return 0; - } - - i = i + 1; - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Lexer // -/////////////////////////////////////////////////////////////////////////////// - -enum { - T_EOF, - T_IDENT, - T_NUM, - T_HEX, - T_STR, - T_CHAR, - T_LPAR, - T_RPAR, - T_LBRA, - T_RBRA, - T_COMMA, - T_SEMI, - T_COLON, - T_STAR, - T_DOT, - T_NOT, - T_ASSIGN, - T_AMP, - T_OR, - T_XOR, - T_LT, - T_GT, - T_LE, - T_GE, - T_EQ, - T_NE, - T_ADD, - T_SUB, - T_LSH, - T_RSH, - T_BANG, - T_BOR, - T_BAND, - T_LSQ, - T_RSQ, - T_DIV, - T_MOD, +#ifndef my__start +#define my__start main +#endif +#ifndef my_syscall +#define my_syscall syscall +#endif +struct my_alloc; +struct my_assembler; +struct my_chunk; +struct my_compiler; +struct my_decl; +struct my_file; +struct my_fixup; +struct my_label; +struct my_node; +struct my_page; +struct my_parser; +struct my_peg; +struct my_peg_frame; +struct my_peg_node; +struct my_peg_op; +struct my_sigaction; +struct my_type; +struct my_alloc { + struct my_page* my_page; }; - -// The token from the source -unsigned char token[4096]; - -// Token type -int tt; - -// Token length -int tlen; - -// Single character lookahead -int nc; - -// Line number of the start of the current token -int lineno; - -// Read in an identifier -void -feed_ident(void) -{ - tt = T_IDENT; - while (1) { - if (!((nc >= 'a' && nc <= 'z') || - (nc >= 'A' && nc <= 'Z') || - (nc >= '0' && nc <= '9') || - nc == '_')) { - break; - } - if (tlen == sizeof(token) - 1) { - die("identifier too long"); - } - token[tlen] = nc; - tlen = tlen + 1; - nc = fgetc(fin); - } - token[tlen] = 0; -} - -// Parse a hex digit -int -hexdig(int c) -{ - if (c >= '0' && c <= '9') { - return c - '0'; - } - - if (c >= 'A' && c <= 'F') { - return c - 'F' + 10; - } - - if (c >= 'a' && c <= 'f') { - return c - 'a' + 10; - } - - die("invalid hex digit"); - return 0; -} - -// Parse an escape and replace nc with the value -void -feed_escape(void) -{ - int hex; - - nc = fgetc(fin); - if (nc == 't') { - nc = '\t'; - } else if (nc == 'r') { - nc = '\r'; - } else if (nc == 'n') { - nc = '\n'; - } else if (nc == 'x') { - nc = fgetc(fin); - hex = hexdig(nc) * 16; - - nc = fgetc(fin); - hex = hex + hexdig(nc); - - nc = hex; - } else if (nc != '\\' && nc != '\'' && nc != '"') { - die("invalid escape"); - } -} - -// Read in a string -void -feed_str(void) -{ - tt = T_STR; - nc = fgetc(fin); - while (1) { - if (nc == '"') { - token[tlen] = 0; - nc = fgetc(fin); - return; - } - - if (nc == EOF) { - die("eof in string literal"); - } - - if (nc == 0 || nc == '\n') { - die("invalid char in string"); - } - - if (tlen == sizeof(token) - 1) { - die("string too long"); - } - - if (nc == '\\') { - feed_escape(); - } - - token[tlen] = nc; - tlen = tlen + 1; - nc = fgetc(fin); - } -} - -// Read in a character -void -feed_char(void) -{ - tt = T_CHAR; - nc = fgetc(fin); - - if (nc == 0 || nc == EOF || nc == '\'' || nc == '\n') { - die("invalid char"); - } - - if (nc == '\\') { - feed_escape(); - } - - token[tlen] = nc; - tlen = tlen + 1; - nc = fgetc(fin); - - if (nc != '\'') { - die("expected '"); - } - - token[tlen] = 0; - nc = fgetc(fin); -} - -// Read a hex number -void -feed_hex(void) -{ - tt = T_HEX; - - tlen = 0; - while (1) { - if (!((nc >= '0' && nc <= '9') - || (nc >= 'a' && nc <= 'f') - || (nc >= 'A' && nc <= 'F'))) { - break; - } - if (tlen == sizeof(token) - 1) { - die("identifier too long"); - } - token[tlen] = nc; - tlen = tlen + 1; - nc = fgetc(fin); - } - - if (!tlen) { - die("expected hex"); - } - - token[tlen] = 0; -} - -// Read in a number -void -feed_num(void) -{ - tt = T_NUM; - - if (nc == '0') { - token[tlen] = nc; - tlen = tlen + 1; - nc = fgetc(fin); - - if (nc == 'x') { - nc = fgetc(fin); - feed_hex(); - return; - } - } - - while (1) { - if (!(nc >= '0' && nc <= '9')) { - break; - } - if (tlen == sizeof(token) - 1) { - die("identifier too long"); - } - token[tlen] = nc; - tlen = tlen + 1; - nc = fgetc(fin); - } - token[tlen] = 0; -} - -// Read in the next token -void -feed(void) -{ - tlen = 0; - - // Loop invariant: possible whitespace or EOF - while (1) { - if (nc == EOF) { - // Reached the end of input - tt = T_EOF; - return; - } else if (nc == ' ' || nc == '\t' || nc == '\r') { - // Whitespace - nc = fgetc(fin); - } else if (nc == '\n') { - // Line end - nc = fgetc(fin); - lineno = lineno + 1; - } else if (nc == '/') { - // Comment - nc = fgetc(fin); - if (nc == '/') { - // Read until the end of the comment - while (1) { - if (nc == '\n' || nc == EOF) { - break; - } - nc = fgetc(fin); - } - } else { - tt = T_DIV; - return; - } - } else { - // Start of a real token - break; - } - } - - // Identifier - if ((nc >= 'a' && nc <= 'z') || (nc >= 'A' && nc <= 'Z') || nc == '_') { - feed_ident(); - return; - } - - // String - if (nc == '"') { - feed_str(); - return; - } - - // Character - if (nc == '\'') { - feed_char(); - return; - } - - // Number - if (nc >= '0' && nc <= '9') { - feed_num(); - return; - } - - // Single character tokens - if (nc == '(') { - tt = T_LPAR; - nc = fgetc(fin); - } else if (nc == ')') { - tt = T_RPAR; - nc = fgetc(fin); - } else if (nc == '{') { - tt = T_LBRA; - nc = fgetc(fin); - } else if (nc == '}') { - tt = T_RBRA; - nc = fgetc(fin); - } else if (nc == ',') { - tt = T_COMMA; - nc = fgetc(fin); - } else if (nc == ';') { - tt = T_SEMI; - nc = fgetc(fin); - } else if (nc == ':') { - tt = T_COLON; - nc = fgetc(fin); - } else if (nc == '*') { - tt = T_STAR; - nc = fgetc(fin); - } else if (nc == '.') { - tt = T_DOT; - nc = fgetc(fin); - } else if (nc == '=') { - tt = T_ASSIGN; - nc = fgetc(fin); - if (nc == '=') { - tt = T_EQ; - nc = fgetc(fin); - } - } else if (nc == '&') { - tt = T_AMP; - nc = fgetc(fin); - if (nc == '&') { - tt = T_BAND; - nc = fgetc(fin); - } - } else if (nc == '~') { - tt = T_NOT; - nc = fgetc(fin); - } else if (nc == '|') { - tt = T_OR; - nc = fgetc(fin); - if (nc == '|') { - tt = T_BOR; - nc = fgetc(fin); - } - } else if (nc == '^') { - tt = T_XOR; - nc = fgetc(fin); - } else if (nc == '!') { - tt = T_BANG; - nc = fgetc(fin); - if (nc == '=') { - tt = T_NE; - nc = fgetc(fin); - } - } else if (nc == '<') { - tt = T_LT; - nc = fgetc(fin); - if (nc == '<') { - tt = T_LSH; - nc = fgetc(fin); - } else if (nc == '=') { - tt = T_LE; - nc = fgetc(fin); - } - } else if (nc == '>') { - tt = T_GT; - nc = fgetc(fin); - if (nc == '>') { - tt = T_RSH; - nc = fgetc(fin); - } else if (nc == '=') { - tt = T_GE; - nc = fgetc(fin); - } - } else if (nc == '[') { - tt = T_LSQ; - nc = fgetc(fin); - } else if (nc == ']') { - tt = T_RSQ; - nc = fgetc(fin); - } else if (nc == '+') { - tt = T_ADD; - nc = fgetc(fin); - } else if (nc == '-') { - tt = T_SUB; - nc = fgetc(fin); - } else if (nc == '%') { - tt = T_MOD; - nc = fgetc(fin); - } else { - die("invalid char"); - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Grammar // -/////////////////////////////////////////////////////////////////////////////// - -struct node { - int kind; - struct node *a; - struct node *b; - struct type *t; - int n; - unsigned char *s; - int offset; - unsigned char *filename; - int lineno; +struct my_assembler { + struct my_alloc* my_a; + struct my_file* my_out; + unsigned long my_at; + struct my_chunk* my_text; + struct my_chunk* my_text_end; + unsigned long my_bits32; }; - -enum { - N_IDENT, - N_NUM, - N_CHAR, - N_STR, - N_STMTLIST, - N_EXPRLIST, - N_CALL, - N_DOT, - N_ARGLIST, - N_FUNC, - N_ARGDECL, - N_FUNCDECL, - N_PROGRAM, - N_FUNCTYPE, - N_PTRTYPE, - N_STRUCT, - N_MEMBERDECL, - N_MEMBERLIST, - N_CONDLIST, - N_COND, - N_ENUM, - N_ENUMITEM, - N_ENUMLIST, - N_LOOP, - N_BREAK, - N_CONTINUE, - N_RETURN, - N_VARDECL, - N_ASSIGN, - N_SIZEOF, - N_REF, - N_DEREF, - N_CAST, - N_INDEX, - N_LT, - N_GT, - N_LE, - N_GE, - N_EQ, - N_NE, - N_ADD, - N_SUB, - N_MUL, - N_LSH, - N_RSH, - N_BNOT, - N_BOR, - N_BAND, - N_AND, - N_OR, - N_XOR, - N_NOT, - N_POS, - N_NEG, - N_DIV, - N_MOD, +struct my_chunk { + struct my_chunk* my_next; + unsigned char * my_buf; + unsigned long my_fill; + unsigned long my_cap; }; - -// Construct a node -struct node * -mknode(int kind, struct node *a, struct node *b) -{ - struct node *n; - - n = malloc(sizeof(*n)); - if (!n) { - die("out of memory"); - } - - n->kind = kind; - n->a = a; - n->b = b; - n->t = 0; - n->n = 0; - n->s = 0; - n->offset = 0; - n->filename = filename; - n->lineno = lineno; - - return n; -} - -// Copy the current token -unsigned char * -intern(void) -{ - unsigned char *ret; - int i; - - ret = malloc(tlen + 1); - if (!ret) { - return 0; - } - - i = 0; - while (1) { - if (i >= tlen) { - break; - } - ret[i] = token[i]; - i = i + 1; - } - ret[i] = 0; - - return ret; -} - -// ident := IDENT -struct node * -ident(void) -{ - struct node *n; - - if (tt != T_IDENT) { - return 0; - } - - n = mknode(N_IDENT, 0, 0); - n->s = intern(); - feed(); - - return n; -} - -struct node * -hex(void) -{ - struct node *n; - long x; - int i; - int d; - - x = 0; - i = 0; - while (1) { - if (i >= tlen) { - break; - } - - d = token[i]; - - if (d >= '0' && d <= '9') { - d = d - '0'; - } else if (d >= 'a' && d <= 'f') { - d = d - 'a' + 10; - } else { - d = d - 'A' + 10; - } - - x = x * 16; - x = x + d; - i = i + 1; - - if (x > 0x7fffffff) { - die("overflow"); - } - } - - n = mknode(N_NUM, 0, 0); - n->n = x; - feed(); - - return n; -} - -// num := NUM -struct node * -num(void) -{ - struct node *n; - long x; - int d; - int i; - - if (tt == T_HEX) { - return hex(); - } - - if (tt != T_NUM) { - return 0; - } - - x = 0; - i = 0; - while (1) { - if (i >= tlen) { - break; - } - - d = token[i] - '0'; - - x = x * 10; - - x = x + d; - i = i + 1; - - if (x > 0x7fffffff) { - die("overflow"); - } - } - - n = mknode(N_NUM, 0, 0); - n->n = x; - feed(); - - return n; -} - -// chr := CHAR -struct node * -chr(void) -{ - struct node *n; - - if (tt != T_CHAR) { - return 0; - } - - n = mknode(N_CHAR, 0, 0); - n->n = token[0]; - feed(); - - return n; -} - -// str := STR -struct node * -str(void) -{ - struct node *n; - - if (tt != T_STR) { - return 0; - } - - n = mknode(N_STR, 0, 0); - n->s = intern(); - feed(); - - return n; -} - -// primary := ident -// | num -// | str -// | chr -// | '(' expr ')' -struct node * -primary(void) -{ - struct node *n; - - n = ident(); - if (n) { - return n; - } - - n = num(); - if (n) { - return n; - } - - n = str(); - if (n) { - return n; - } - - n = chr(); - if (n) { - return n; - } - - if (tt == T_LPAR) { - feed(); - - n = expr(); - if (!n) { - die("expected expr"); - } - - if (tt != T_RPAR) { - die("expected )"); - } - feed(); - - return n; - } - - return 0; -} - -// expr_list := expr -// | expr ',' expr_list -struct node * -expr_list(void) -{ - struct node *n; - struct node *e; - struct node *a; - - a = expr(); - if (!a) { - return 0; - } - - e = mknode(N_EXPRLIST, a, 0); - n = e; - - while (1) { - if (tt != T_COMMA) { - return n; - } - feed(); - - a = expr(); - if (!a) { - die("expected expr"); - } - - e->b = mknode(N_EXPRLIST, a, 0); - e = e->b; - } -} - -// post_expr := primary -// | 'sizeof' '(' expr ')' -// | post_expr '[' expr ']' -// | post_expr '(' expr_list ')' -// | post_expr '.' ident -// | post_expr ':' type -struct node * -post_expr(void) -{ - struct node *n; - struct node *b; - - if (tt == T_IDENT && !cmp(token, (unsigned char *)"sizeof")) { - feed(); - - if (tt != T_LPAR) { - die("expected ("); - } - feed(); - - n = expr(); - if (!n) { - die("expected expr"); - } - - if (tt != T_RPAR) { - die("expected )"); - } - feed(); - - return mknode(N_SIZEOF, n, 0);; - } - - n = primary(); - if (!n) { - return 0; - } - - while (1) { - if (tt == T_LSQ) { - feed(); - - b = expr(); - - if (tt != T_RSQ) { - die("expected ]"); - } - feed(); - - n = mknode(N_INDEX, n, b); - } else if (tt == T_LPAR) { - feed(); - - b = expr_list(); - - if (tt != T_RPAR) { - die("expected )"); - } - feed(); - - n = mknode(N_CALL, n, b); - } else if (tt == T_DOT) { - feed(); - - b = ident(); - if (!b) { - die("expected ident"); - } - - n = mknode(N_DOT, n, b); - } else if (tt == T_COLON) { - feed(); - - b = type(); - if (!b) { - die("expected type"); - } - - n = mknode(N_CAST, n, b); - } else { - return n; - } - } -} - -// unary_expr := post_expr -// | '&' unary_expr -// | '*' unary_expr -// | '+' unary_expr -// | '-' unary_expr -// | '~' unary_expr -// | '!' unary_expr -struct node * -unary_expr(void) -{ - struct node *n; - - if (tt == T_AMP) { - feed(); - - n = unary_expr(); - if (!n) { - die("expected unary_expr"); - } - - return mknode(N_REF, n, 0); - } - - if (tt == T_STAR) { - feed(); - - n = unary_expr(); - if (!n) { - die("expected unary_expr"); - } - - return mknode(N_DEREF, n, 0); - } - - if (tt == T_ADD) { - feed(); - - n = unary_expr(); - if (!n) { - die("expected unary_expr"); - } - - return mknode(N_POS, n, 0); - } - - if (tt == T_SUB) { - feed(); - - n = unary_expr(); - if (!n) { - die("expected unary_expr"); - } - - return mknode(N_NEG, n, 0); - } - - if (tt == T_NOT) { - feed(); - - n = unary_expr(); - if (!n) { - die("expected unary_expr"); - } - - return mknode(N_NOT, n, 0); - } - - if (tt == T_BANG) { - feed(); - - n = unary_expr(); - if (!n) { - die("expected unary_expr"); - } - - return mknode(N_BNOT, n, 0); - } - - return post_expr(); -} - - -// shift_expr := unary_expr -// | shift_expr '<<' unary_expr -// | shift_expr '>>' unary_expr -struct node * -shift_expr(void) -{ - struct node *a; - struct node *b; - - a = unary_expr(); - if (!a) { - return 0; - } - - while (1) { - if (tt == T_LSH) { - feed(); - - b = unary_expr(); - if (!b) { - die("expected unary_expr"); - } - - a = mknode(N_LSH, a, b); - } else if (tt == T_RSH) { - feed(); - - b = unary_expr(); - if (!b) { - die("expected unary_expr"); - } - - a = mknode(N_RSH, a, b); - } else { - return a; - } - } -} - -// mul_expr := shift_expr -// | mul_expr '*' shift_expr -// | mul_expr '/' shift_expr -// | mul_expr '%' shift_expr -// | mul_expr '&' shift_expr -struct node * -mul_expr(void) -{ - struct node *a; - struct node *b; - - a = shift_expr(); - if (!a) { - return 0; - } - - while (1) { - if (tt == T_STAR) { - feed(); - - b = shift_expr(); - if (!b) { - die("expected shift_expr"); - } - - a = mknode(N_MUL, a, b); - } else if (tt == T_DIV) { - feed(); - - b = shift_expr(); - if (!b) { - die("expected shift_expr"); - } - - a = mknode(N_DIV, a, b); - } else if (tt == T_MOD) { - feed(); - - b = shift_expr(); - if (!b) { - die("expected shift_expr"); - } - - a = mknode(N_MOD, a, b); - } else if (tt == T_AMP) { - feed(); - - b = shift_expr(); - if (!b) { - die("expected shift_expr"); - } - - a = mknode(N_AND, a, b); - } else { - return a; - } - } -} - -// add_expr := mul_expr -// | add_expr '+' mul_expr -// | add_expr '-' mul_expr -// | add_expr '|' mul_expr -// | add_expr '^' mul_expr -struct node * -add_expr(void) -{ - struct node *a; - struct node *b; - - a = mul_expr(); - if (!a) { - return 0; - } - - while (1) { - if (tt == T_ADD) { - feed(); - - b = mul_expr(); - if (!b) { - die("expected mul_expr"); - } - - a = mknode(N_ADD, a, b); - } else if (tt == T_SUB) { - feed(); - - b = mul_expr(); - if (!b) { - die("expected mul_expr"); - } - - a = mknode(N_SUB, a, b); - } else if (tt == T_OR) { - feed(); - - b = mul_expr(); - if (!b) { - die("expected mul_expr"); - } - - a = mknode(N_OR, a, b); - } else if (tt == T_XOR) { - feed(); - - b = mul_expr(); - if (!b) { - die("expected mul_expr"); - } - - a = mknode(N_XOR, a, b); - } else { - return a; - } - } -} - -// comp_expr := add_expr -// | add_expr '<' add_expr -// | add_expr '>' add_expr -// | add_expr '<=' add_expr -// | add_expr '>=' add_expr -// | add_expr '==' add_expr -// | add_expr '!=' add_expr -struct node * -comp_expr(void) -{ - struct node *a; - struct node *b; - - a = add_expr(); - if (!a) { - return 0; - } - - if (tt == T_LT) { - feed(); - - b = add_expr(); - if (!b) { - die("expected add_expr"); - } - - return mknode(N_LT, a, b); - } - - if (tt == T_GT) { - feed(); - - b = add_expr(); - if (!b) { - die("expected add_expr"); - } - - return mknode(N_GT, a, b); - } - - if (tt == T_LE) { - feed(); - - b = add_expr(); - if (!b) { - die("expected add_expr"); - } - - return mknode(N_LE, a, b); - } - - if (tt == T_GE) { - feed(); - - b = add_expr(); - if (!b) { - die("expected add_expr"); - } - - return mknode(N_GE, a, b); - } - - if (tt == T_EQ) { - feed(); - - b = add_expr(); - if (!b) { - die("expected add_expr"); - } - - return mknode(N_EQ, a, b); - } - - if (tt == T_NE) { - feed(); - - b = add_expr(); - if (!b) { - die("expected add_expr"); - } - - return mknode(N_NE, a, b); - } - - return a; -} - -// bool_expr := bool_expr -// | comp_expr '&&' bool_expr -// | comp_expr '||' bool_expr -struct node * -bool_expr(void) -{ - struct node *a; - struct node *b; - - a = comp_expr(); - if (!a) { - return 0; - } - - if (tt == T_BAND) { - feed(); - - b = bool_expr(); - if (!b) { - die("expected bool_expr"); - } - - return mknode(N_BAND, a, b); - } - - if (tt == T_BOR) { - feed(); - - b = bool_expr(); - if (!b) { - die("expected bool_expr"); - } - - return mknode(N_BOR, a, b); - } - - return a; -} - -// expr := bool_expr -// | bool_expr '=' expr -struct node * -expr(void) -{ - struct node *a; - struct node *b; - - a = bool_expr(); - if (!a) { - return 0; - } - - if (tt == T_ASSIGN) { - feed(); - - b = expr(); - if (!b) { - die("expected expr"); - } - - return mknode(N_ASSIGN, a, b); - } - - return a; -} - -// if_stmt := 'if' expr '{' stmt_list '}' -// | 'if' expr '{' stmt_list '}' 'else' if_stmt -// | 'if' expr '{' stmt_list '}' 'else' '{' stmt_list '}' -struct node * -if_stmt(void) -{ - struct node *n; - struct node *e; - struct node *a; - struct node *b; - - if (tt != T_IDENT || cmp(token, (unsigned char *)"if")) { - return 0; - } - feed(); - - n = mknode(N_CONDLIST, 0, 0); - e = n; - - while (1) { - a = expr(); - if (!a) { - die("expected expr"); - } - - if (tt != T_LBRA) { - die("expected {"); - } - feed(); - - b = stmt_list(); - - if (tt != T_RBRA) { - die("expected }"); - } - feed(); - - e->a = mknode(N_COND, a, b); - - if (tt != T_IDENT || cmp(token, (unsigned char *)"else")) { - return n; - } - feed(); - - if (tt == T_LBRA) { - feed(); - - b = stmt_list(); - - if (tt != T_RBRA) { - die("expected }"); - } - feed(); - - e->b = mknode(N_CONDLIST, mknode(N_COND, 0, b), 0); - - return n; - } - - if (tt != T_IDENT || cmp(token, (unsigned char *)"if")) { - die("expected if"); - } - feed(); - - e->b = mknode(N_CONDLIST, 0, 0); - e = e->b; - } -} - -// loop_stmt := 'loop' '{' stmt_list '}' -struct node * -loop_stmt(void) -{ - struct node *a; - - if (tt != T_IDENT || cmp(token, (unsigned char *)"loop")) { - return 0; - } - feed(); - - if (tt != T_LBRA) { - die("expected {"); - } - feed(); - - a = stmt_list(); - - if (tt != T_RBRA) { - die("expected }"); - } - feed(); - - return mknode(N_LOOP, a, 0); -} - -// break_stmt := 'break' -struct node * -break_stmt(void) -{ - if (tt != T_IDENT || cmp(token, (unsigned char *)"break")) { - return 0; - } - feed(); - - return mknode(N_BREAK, 0, 0); -} - -// continue_stmt := 'continue' -struct node * -continue_stmt(void) -{ - if (tt != T_IDENT || cmp(token, (unsigned char *)"continue")) { - return 0; - } - feed(); - - return mknode(N_CONTINUE, 0, 0); -} - -// return_stmt := 'return' -// | 'return' expr -struct node * -return_stmt(void) -{ - struct node *a; - - if (tt != T_IDENT || cmp(token, (unsigned char *)"return")) { - return 0; - } - feed(); - - a = expr(); - - return mknode(N_RETURN, a, 0); -} - -// var_decl := ident ':' type -struct node * -var_decl(void) -{ - struct node *n; - struct node *a; - struct node *b; - - a = ident(); - if (!a) { - return 0; - } - - if (tt != T_COLON) { - die("expected :"); - } - feed(); - - b = type(); - if (!b) { - die("expected type"); - } - - return mknode(N_VARDECL, a, b); -} - -// var_stmt := 'var' var_decl -struct node * -var_stmt(void) -{ - struct node *a; - - if (tt != T_IDENT || cmp(token, (unsigned char *)"var")) { - return 0; - } - feed(); - - a = var_decl(); - if (!a) { - die("expected var_decl"); - } - - return a; -} - -// stmt := if_stmt -// | loop_stmt -// | break_stmt ';' -// | continue_stmt ';' -// | return_stmt ';' -// | var_stmt ';' -// | expr ';' -struct node * -stmt(void) -{ - struct node *n; - - n = if_stmt(); - if (n) { - return n; - } - - n = loop_stmt(); - if (n) { - return n; - } - - n = break_stmt(); - if (n) { - if (tt != T_SEMI) { - die("expected ;"); - } - feed(); - - return n; - } - - n = return_stmt(); - if (n) { - if (tt != T_SEMI) { - die("expected ;"); - } - feed(); - - return n; - } - - n = continue_stmt(); - if (n) { - if (tt != T_SEMI) { - die("expected ;"); - } - feed(); - - return n; - } - - n = var_stmt(); - if (n) { - if (tt != T_SEMI) { - die("expected ;"); - } - feed(); - - return n; - } - - n = expr(); - if (n) { - if (tt != T_SEMI) { - die("expected ;"); - } - feed(); - - return n; - } - - return 0; -} - -// stmt_list := stmt -// | stmt stmt_list -struct node * -stmt_list(void) -{ - struct node *n; - struct node *e; - struct node *a; - - a = stmt(); - if (!a) { - return 0; - } - - e = mknode(N_STMTLIST, a, 0); - n = e; - - while (1) { - a = stmt(); - if (!a) { - return n; - } - - e->b = mknode(N_STMTLIST, a, 0); - e = e->b; - } -} - -// type := ident -// | '*' type -// | '(' type ')' -struct node * -type(void) -{ - struct node *n; - - if (tt == T_STAR) { - feed(); - - n = type(); - - return mknode(N_PTRTYPE, n, 0); - } - - if (tt == T_LPAR) { - feed(); - - n = type(); - - if (tt != T_RPAR) { - die("expected )"); - } - feed(); - - return n; - } - - return ident(); -} - -// arg_decl := ':' type -// ident ':' type -struct node * -arg_decl(void) -{ - struct node *n; - struct node *a; - struct node *b; - - a = ident(); - if (!a) { - return 0; - } - - if (tt != T_COLON) { - die("expected :"); - } - feed(); - - b = type(); - if (!b) { - die("expected type"); - } - - return mknode(N_ARGDECL, a, b); -} - -// arg_list := arg_decl -// | arg_decl ',' arg_list -struct node * -arg_list(void) -{ - struct node *n; - struct node *e; - struct node *a; - - a = arg_decl(); - if (!a) { - return 0; - } - - e = mknode(N_ARGLIST, a, 0); - n = e; - - while (1) { - if (tt != T_COMMA) { - return n; - } - feed(); - - a = arg_decl(); - if (!a) { - die("expected identifier"); - } - - e->b = mknode(N_ARGLIST, a, 0); - e = e->b; - } -} - -// func_decl := ident '(' ')' ':' type -// | ident '(' arg_list ')' ':' type -// | ident '(' ')' -// | ident '(' arg_list ')' -struct node * -func_decl(void) -{ - struct node *a; - struct node *b; - struct node *c; - - a = ident(); - if (!a) { - return 0; - } - - if (tt != T_LPAR) { - die("expected ("); - } - feed(); - - b = arg_list(); - - if (tt != T_RPAR) { - die("expected )"); - } - feed(); - - if (tt != T_COLON) { - return mknode(N_FUNCDECL, a, mknode(N_FUNCTYPE, b, 0)); - } - feed(); - - c = type(); - if (!c) { - die("expected type"); - } - - return mknode(N_FUNCDECL, a, mknode(N_FUNCTYPE, b, c)); -} - - -// func := func_decl '{' stmt_list '}' -// | func_decl ';' -struct node * -func(void) -{ - struct node *n; - struct node *a; - struct node *b; - - a = func_decl(); - if (!a) { - return 0; - } - - if (tt == T_SEMI) { - feed(); - return a; - } - - if (tt != T_LBRA) { - die("expected {"); - } - feed(); - - b = stmt_list(); - - if (tt != T_RBRA) { - die("expected }"); - } - feed(); - - return mknode(N_FUNC, a, b); -} - -// member_decl := ident ':' type -struct node * -member_decl(void) -{ - struct node *n; - struct node *a; - struct node *b; - - a = ident(); - if (!a) { - return 0; - } - - if (tt != T_COLON) { - die("expected :"); - } - feed(); - - b = type(); - if (!b) { - die("expected type"); - } - - return mknode(N_MEMBERDECL, a, b); -} - -// enum_item := ident -// | ident '=' num -struct node * -enum_item(void) -{ - struct node *a; - struct node *b; - - a = ident(); - if (!a) { - return 0; - } - - if (tt != T_ASSIGN) { - return mknode(N_ENUMITEM, a, 0); - } - feed(); - - b = num(); - if (!b) { - die("expected num"); - } - - return mknode(N_ENUMITEM, a, b); -} - -// enum_list := enum_item -// | enum_list ',' enum_list -struct node * -enum_list(void) -{ - struct node *n; - struct node *e; - struct node *a; - - a = enum_item(); - if (!a) { - return 0; - } - - e = mknode(N_ENUMLIST, a, 0); - n = e; - - while (1) { - if (tt != T_COMMA) { - return n; - } - feed(); - - a = enum_item(); - if (!a) { - return n; - } - - e->b = mknode(N_ENUMLIST, a, 0); - e = e->b; - } -} - -// enum_decl := 'enum' ident '{' enum_list '}' -struct node * -enum_decl(void) -{ - struct node *b; - - if (tt != T_IDENT) { - return 0; - } - - if (cmp(token, (unsigned char *)"enum")) { - return 0; - } - feed(); - - if (tt != T_LBRA) { - die("expected {"); - } - feed(); - - b = enum_list(); - - if (tt != T_RBRA) { - die("expected }"); - } - feed(); - - return mknode(N_ENUM, 0, b); -} - -// member_list := member_decl -// | member_decl ';' member_list -struct node * -member_list(void) -{ - struct node *n; - struct node *e; - struct node *a; - - a = member_decl(); - if (!a) { - return 0; - } - - e = mknode(N_MEMBERLIST, a, 0); - n = e; - - while (1) { - if (tt != T_SEMI) { - return n; - } - feed(); - - a = member_decl(); - if (!a) { - return n; - } - - e->b = mknode(N_MEMBERLIST, a, 0); - e = e->b; - } -} - -// struct_decl := 'struct' ident '{' member_list '}' -struct node * -struct_decl(void) -{ - struct node *a; - struct node *b; - - if (tt != T_IDENT) { - return 0; - } - - if (cmp(token, (unsigned char *)"struct")) { - return 0; - } - feed(); - - a = ident(); - if (!a) { - die("expected ident"); - } - - if (tt != T_LBRA) { - die("expected {"); - } - feed(); - - b = member_list(); - - if (tt != T_RBRA) { - die("expected }"); - } - feed(); - - return mknode(N_STRUCT, a, b); -} - -// decl := func -// | struct_decl -struct node * -decl(void) -{ - struct node *n; - - n = enum_decl(); - if (n) { - return n; - } - - n = struct_decl(); - if (n) { - return n; - } - - return func(); -} - -// program := func -// | func program -struct node * -program(struct node *p) -{ - struct node *n; - struct node *e; - struct node *d; - - d = decl(); - if (!d) { - return p; - } - - e = mknode(N_PROGRAM, d, 0); - n = e; - - while (1) { - d = decl(); - if (!d) { - if (tt != T_EOF) { - die("expected eof"); - } - - e->b = p; - return n; - } - - e->b = mknode(N_PROGRAM, d, 0); - e = e->b; - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Setup // -/////////////////////////////////////////////////////////////////////////////// - -// Prime the parser by reading in the lookahead -void -setup(void) -{ - filename = (unsigned char *)"<stdin>"; - fin = stdin; - fout = stdout; - lineno = 1; - nc = 0; -} - -/////////////////////////////////////////////////////////////////////////////// -// Type System // -/////////////////////////////////////////////////////////////////////////////// - -enum { - TY_VOID, - TY_INT, - TY_BYTE, - TY_PTR, - TY_ARG, - TY_FUNC, - TY_STRUCT, +struct my_compiler { + struct my_alloc* my_a; + struct my_parser* my_p; + unsigned char * my_filename; + unsigned long my_lineno; + unsigned long my_colno; + struct my_assembler* my_as; + struct my_decl* my_decls; + unsigned long my_do_cout; + struct my_file* my_cout; +}; +struct my_decl { + unsigned char * my_name; + unsigned char * my_member_name; + struct my_decl* my_p; + struct my_decl* my_l; + struct my_decl* my_r; + unsigned long my_func_defined; + struct my_type* my_func_type; + struct my_label* my_func_label; + struct my_node* my_func_def; + unsigned long my_struct_defined; + unsigned long my_struct_size; + unsigned long my_struct_layout_done; + struct my_node* my_struct_def; + unsigned long my_member_defined; + struct my_type* my_member_type; + unsigned long my_member_offset; + struct my_node* my_member_def; + unsigned long my_enum_defined; + unsigned long my_enum_value; + struct my_node* my_enum_def; + unsigned long my_var_defined; + struct my_type* my_var_type; + unsigned long my_var_offset; + struct my_node* my_var_def; + unsigned long my_goto_defined; + struct my_label* my_goto_label; +}; +struct my_file { + struct my_alloc* my_a; + unsigned long my_fd; + unsigned char * my_buf; + unsigned long my_r; + unsigned long my_w; + unsigned long my_cap; + unsigned long my_eof; +}; +struct my_fixup { + struct my_fixup* my_next; + unsigned char * my_ptr; + unsigned long my_at; +}; +struct my_label { + struct my_fixup* my_fix; + unsigned long my_at; + unsigned long my_fixed; +}; +struct my_node { + unsigned long my_kind; + struct my_node* my_a; + struct my_node* my_b; + unsigned char * my_filename; + unsigned long my_lineno; + unsigned long my_colno; + unsigned long my_n; + unsigned char * my_s; + struct my_type* my_t; }; - -struct type { - int kind; - struct sdecl *s; - struct type *val; - struct type *arg; +struct my_page { + unsigned char * my_ptr; + unsigned long my_fill; + unsigned long my_size; }; - -struct decl { - unsigned char *name; - struct decl *p; - struct decl *l; - struct decl *r; - struct type *ftype; - struct node *args; - struct node *body; - struct label *label; - struct vdecl *locals; - struct vdecl *vlocals; - struct vdecl *vargs; - int preamble; - int defined; +struct my_parser { + struct my_alloc* my_a; + struct my_peg* my_p; }; - -struct vdecl { - unsigned char *name; - struct vdecl *p; - struct vdecl *l; - struct vdecl *r; - struct vdecl *next; - struct type *t; - int size; - int offset; - int defined; +struct my_peg { + struct my_alloc* my_a; + unsigned char * my_filename; + unsigned char * my_src; + unsigned long my_size; + unsigned long my_pos; + unsigned long my_line; + unsigned long my_col; + unsigned long my_tag; + unsigned long my_fail_depth; + unsigned long my_fail_tag; + unsigned long my_fail_line; + unsigned long my_fail_col; + unsigned char * my_fail_literal; + struct my_peg_frame* my_stack; + unsigned long my_sp; + unsigned long my_limit; + unsigned long my_depth; + unsigned long my_op; + struct my_peg_op* my_out; + unsigned long my_cap; + struct my_peg_node** my_nstack; + unsigned long my_np; + unsigned long my_ncap; }; - -struct mdecl { - unsigned char *name; - struct mdecl *p; - struct mdecl *l; - struct mdecl *r; - struct mdecl *next; - struct type *t; - int offset; - int defined; +struct my_peg_frame { + unsigned long my_pos; + unsigned long my_depth; + unsigned long my_op; + unsigned long my_tag; + unsigned long my_line; + unsigned long my_col; }; - -struct sdecl { - unsigned char *name; - struct sdecl *p; - struct sdecl *l; - struct sdecl *r; - struct mdecl *mem; - struct mdecl *vmem; - struct mdecl *vmem_last; - int size; - int computed; - int defined; +struct my_peg_node { + unsigned long my_tag; + struct my_peg_node* my_next; + struct my_peg_node* my_child; + unsigned char * my_str; + unsigned long my_len; + unsigned char * my_filename; + unsigned long my_line; + unsigned long my_col; }; - -struct edecl { - unsigned char *name; - struct edecl *p; - struct edecl *l; - struct edecl *r; - int val; - int defined; +struct my_peg_op { + unsigned long my_tag; + unsigned long my_nargs; + unsigned long my_start; + unsigned long my_end; + unsigned long my_line; + unsigned long my_col; }; - -struct decl *decls; -struct sdecl *structs; -struct edecl *enums; - -// Unify two types -void -unify(struct type *a, struct type *b) -{ - int kind; - - if (!a || !b || a == b) { - return; - } - - if (a->kind != b->kind) { - die("type error"); - } - - kind = a->kind; - if (kind == TY_PTR) { - unify(a->val, b->val); - } else if (kind == TY_FUNC) { - unify(a->val, b->val); - unify(a->arg, b->arg); - } else if (kind == TY_ARG) { - unify(a->val, b->val); - unify(a->arg, b->arg); - } else if (kind == TY_STRUCT) { - if (a->s != b->s) { - die("type error"); - } - } else if (kind != TY_VOID && kind != TY_INT && kind != TY_BYTE) { - die("unify: invalid type"); - } -} - -// Find a function declaration by name -struct decl * -find(unsigned char *name) -{ - struct decl **link; - struct decl *d; - struct decl *p; - int c; - - p = 0; - link = &decls; +struct my_sigaction { + unsigned long my_handler; + unsigned long my_flags; + unsigned long my_restorer; + unsigned long my_mask; +}; +struct my_type { + unsigned long my_kind; + struct my_decl* my_st; + struct my_type* my_val; + struct my_type* my_arg; +}; +enum { + my_AF_INET = 2, + my_CC_A = 7, + my_CC_AE = 3, + my_CC_B = 2, + my_CC_BE = 6, + my_CC_E = 4, + my_CC_G = 15, + my_CC_GE = 13, + my_CC_L = 12, + my_CC_LE = 14, + my_CC_NE = 5, + my_CC_NO = 1, + my_CC_NP = 11, + my_CC_NS = 9, + my_CC_O = 0, + my_CC_P = 10, + my_CC_S = 8, + my_EINTR = 4, + my_EPIPE = 32, + my_N_ADD = 42, + my_N_AND = 50, + my_N_ARGDECL = 10, + my_N_ARGLIST = 8, + my_N_ASSIGN = 30, + my_N_BAND = 49, + my_N_BNOT = 47, + my_N_BOR = 48, + my_N_BREAK = 24, + my_N_CALL = 6, + my_N_CAST = 34, + my_N_CHAR = 2, + my_N_COND = 19, + my_N_CONDLIST = 18, + my_N_CONTINUE = 25, + my_N_DEREF = 33, + my_N_DIV = 56, + my_N_DOT = 7, + my_N_ENUM = 20, + my_N_ENUMITEM = 21, + my_N_ENUMLIST = 22, + my_N_EQ = 40, + my_N_EXPRLIST = 5, + my_N_FUNC = 9, + my_N_FUNCDECL = 11, + my_N_FUNCTYPE = 13, + my_N_GE = 39, + my_N_GOTO = 29, + my_N_GT = 37, + my_N_IDENT = 0, + my_N_INDEX = 35, + my_N_LABEL = 28, + my_N_LE = 38, + my_N_LOOP = 23, + my_N_LSH = 45, + my_N_LT = 36, + my_N_MEMBERDECL = 16, + my_N_MEMBERLIST = 17, + my_N_MOD = 57, + my_N_MUL = 44, + my_N_NE = 41, + my_N_NEG = 55, + my_N_NOT = 53, + my_N_NUM = 1, + my_N_OR = 51, + my_N_POS = 54, + my_N_PROGRAM = 12, + my_N_PTRTYPE = 14, + my_N_REF = 32, + my_N_RETURN = 26, + my_N_RSH = 46, + my_N_SIZEOF = 31, + my_N_STMTLIST = 4, + my_N_STR = 3, + my_N_STRUCT = 15, + my_N_SUB = 43, + my_N_VARDECL = 27, + my_N_XOR = 52, + my_OP_ADCRM = 19, + my_OP_ADDI = 129, + my_OP_ADDRM = 3, + my_OP_ANDI = 262273, + my_OP_ANDRM = 35, + my_OP_CALL = 232, + my_OP_CLD = 252, + my_OP_CLI = 250, + my_OP_CMPI = 458881, + my_OP_CMPRM = 59, + my_OP_CPUID = 4002, + my_OP_GS = 101, + my_OP_HLT = 244, + my_OP_ICALLM = 131327, + my_OP_IDIVM = 458999, + my_OP_IMULM = 262391, + my_OP_IN = 236, + my_OP_IND = 237, + my_OP_INVLPGM = 462593, + my_OP_IRET = 207, + my_OP_IRETQ = 18639, + my_OP_JCC = 3968, + my_OP_JMP = 233, + my_OP_LEA = 141, + my_OP_LGDTM = 134913, + my_OP_LIDTM = 200449, + my_OP_LLDM = 134912, + my_OP_LLDTM = 134912, + my_OP_LOAD = 139, + my_OP_LOAD16 = 26250, + my_OP_LOADB = 138, + my_OP_LTRM = 200448, + my_OP_MOVABS = 184, + my_OP_MOVE = 139, + my_OP_MOVI = 199, + my_OP_NEGM = 196855, + my_OP_NOP = 144, + my_OP_NOTM = 131319, + my_OP_ORI = 65665, + my_OP_ORRM = 11, + my_OP_OS = 102, + my_OP_OUT = 238, + my_OP_OUTD = 239, + my_OP_POPF = 157, + my_OP_POPR = 88, + my_OP_PUSHF = 156, + my_OP_PUSHR = 80, + my_OP_RDCRR = 3872, + my_OP_RDMSR = 3890, + my_OP_RDRAND = 397255, + my_OP_RDSR = 140, + my_OP_RET = 195, + my_OP_SETCC = 3984, + my_OP_SHLM = 262355, + my_OP_SHRM = 327891, + my_OP_STI = 251, + my_OP_STORE = 137, + my_OP_STORE16 = 26249, + my_OP_STOREB = 136, + my_OP_SUBI = 327809, + my_OP_SUBRM = 43, + my_OP_SYSCALL = 3845, + my_OP_SYSRET = 3847, + my_OP_TESTRM = 133, + my_OP_UD2 = 3851, + my_OP_WBINVD = 3849, + my_OP_WRCRR = 3874, + my_OP_WRMSR = 3888, + my_OP_WRSR = 142, + my_OP_XORRM = 51, + my_O_CREAT = 64, + my_O_DIRECTORY = 4096, + my_O_RDONLY = 0, + my_O_RDWR = 2, + my_O_WRONLY = 1, + my_POLLERR = 8, + my_POLLHUP = 16, + my_POLLIN = 1, + my_POLLNVAL = 32, + my_POLLOUT = 4, + my_POLLPRI = 2, + my_P_add_expr = 40, + my_P_add_op = 36, + my_P_and_op = 44, + my_P_arg_decl = 8, + my_P_assign_stmt = 21, + my_P_band_op = 26, + my_P_bnot_op = 54, + my_P_bool_expr = 28, + my_P_bor_op = 27, + my_P_break = 69, + my_P_break_stmt = 15, + my_P_byte = 79, + my_P_call_expr = 57, + my_P_cast_expr = 59, + my_P_char = 66, + my_P_comp_expr = 35, + my_P_compound_stmt = 24, + my_P_continue = 74, + my_P_continue_stmt = 16, + my_P_dec = 64, + my_P_deref_op = 50, + my_P_div_op = 42, + my_P_elif_stmt = 11, + my_P_else = 72, + my_P_else_stmt = 12, + my_P_empty_stmt = 23, + my_P_enum = 77, + my_P_enum_decl = 2, + my_P_enum_item = 1, + my_P_eq_op = 33, + my_P_expr = 25, + my_P_expr_stmt = 22, + my_P_func = 82, + my_P_func_decl = 5, + my_P_func_type = 9, + my_P_ge_op = 30, + my_P_goto = 75, + my_P_goto_stmt = 20, + my_P_grammar = 0, + my_P_gt_op = 32, + my_P_hex = 63, + my_P_ident = 83, + my_P_if = 71, + my_P_if_stmt = 13, + my_P_index_expr = 56, + my_P_int = 80, + my_P_label_stmt = 19, + my_P_le_op = 29, + my_P_loop = 73, + my_P_loop_stmt = 14, + my_P_lsh_op = 46, + my_P_lt_op = 31, + my_P_member_decl = 3, + my_P_member_expr = 58, + my_P_mod_op = 43, + my_P_mul_expr = 45, + my_P_mul_op = 41, + my_P_ne_op = 34, + my_P_neg_op = 52, + my_P_not_op = 53, + my_P_or_op = 38, + my_P_pos_op = 51, + my_P_post_expr = 60, + my_P_primary = 61, + my_P_ptr_type = 7, + my_P_ref_op = 49, + my_P_reserved = 67, + my_P_return = 68, + my_P_return_stmt = 17, + my_P_rsh_op = 47, + my_P_shift_expr = 48, + my_P_sizeof = 70, + my_P_sizeof_expr = 62, + my_P_sp = 84, + my_P_stmt = 10, + my_P_str = 65, + my_P_struct = 78, + my_P_struct_decl = 4, + my_P_sub_op = 37, + my_P_type = 6, + my_P_unary_expr = 55, + my_P_var = 76, + my_P_var_stmt = 18, + my_P_void = 81, + my_P_xor_op = 39, + my_R_CR0 = 0, + my_R_CR1 = 1, + my_R_CR2 = 2, + my_R_CR3 = 3, + my_R_CR4 = 4, + my_R_CR5 = 5, + my_R_CR6 = 6, + my_R_CR7 = 7, + my_R_CS = 1, + my_R_DS = 3, + my_R_ES = 0, + my_R_FS = 4, + my_R_GS = 5, + my_R_R10 = 10, + my_R_R11 = 11, + my_R_R12 = 12, + my_R_R13 = 13, + my_R_R14 = 14, + my_R_R15 = 15, + my_R_R8 = 8, + my_R_R9 = 9, + my_R_RAX = 0, + my_R_RBP = 5, + my_R_RBX = 3, + my_R_RCX = 1, + my_R_RDI = 7, + my_R_RDX = 2, + my_R_RIP = 16, + my_R_RSI = 6, + my_R_RSP = 4, + my_R_SS = 2, + my_SIGALRM = 14, + my_SIGCHLD = 17, + my_SIGINT = 2, + my_SIGPIPE = 13, + my_SIGWINCH = 28, + my_SIG_DFL = 0, + my_SIG_IGN = 1, + my_SOCK_STREAM = 1, + my_TY_ARG = 4, + my_TY_BYTE = 2, + my_TY_FUNC = 5, + my_TY_INT = 1, + my_TY_PTR = 3, + my_TY_STRUCT = 6, + my_TY_VOID = 0, + my_WNOHANG = 1 +}; +void my__start(unsigned long , unsigned char **, unsigned char **); +unsigned long my_accept(unsigned long , unsigned char *, unsigned long *); +void my_addfixup(struct my_assembler*, struct my_label*); +unsigned char * my_alloc(struct my_alloc*, unsigned long ); +unsigned long my_any(struct my_peg*); +void my_as_emit(struct my_assembler*, unsigned long ); +void my_as_jmp(struct my_assembler*, unsigned long , struct my_label*); +void my_as_modm(struct my_assembler*, unsigned long , unsigned long , unsigned long , unsigned long , unsigned long ); +void my_as_modr(struct my_assembler*, unsigned long , unsigned long ); +void my_as_modra(struct my_assembler*, unsigned long , unsigned long , unsigned long ); +void my_as_modri(struct my_assembler*, unsigned long , unsigned long , unsigned long ); +void my_as_modrm(struct my_assembler*, unsigned long , unsigned long , unsigned long , unsigned long , unsigned long , unsigned long ); +void my_as_modrr(struct my_assembler*, unsigned long , unsigned long , unsigned long ); +void my_as_op(struct my_assembler*, unsigned long ); +void my_as_opr(struct my_assembler*, unsigned long , unsigned long ); +void my_as_opri64(struct my_assembler*, unsigned long , unsigned long , unsigned long ); +void my_as_rex(struct my_assembler*, unsigned long , unsigned long , unsigned long , unsigned long ); +void my_assert(unsigned long , unsigned char *); +unsigned long my_bind(unsigned long , unsigned char *, unsigned long ); +void my_bzero(unsigned char *, unsigned long ); +void my_cdie(struct my_compiler*, unsigned char *); +unsigned long my_charset(struct my_peg*, unsigned char *); +void my_choice(struct my_peg*); +unsigned long my_close(unsigned long ); +void my_commit(struct my_peg*); +struct my_compiler* my_comp_setup(struct my_alloc*); +void my_compile(struct my_compiler*, struct my_node*); +void my_compile_expr(struct my_compiler*, struct my_decl*, struct my_node*, unsigned long ); +void my_compile_func(struct my_compiler*, struct my_decl*); +void my_compile_include(struct my_compiler*, struct my_node*); +void my_compile_stmt(struct my_compiler*, struct my_decl*, struct my_node*, struct my_label*, struct my_label*); +struct my_node* my_concat_program(struct my_node*, struct my_node*); +struct my_peg_node* my_construct(struct my_peg*, unsigned long ); +void my_copypos(struct my_node*, struct my_peg_node*); +unsigned long my_count_args(struct my_compiler*, struct my_type*); +void my_cshow_context(struct my_compiler*); +void my_ctranslate(struct my_compiler*); +void my_ctranslate_expr(struct my_compiler*, struct my_node*); +void my_ctranslate_func(struct my_compiler*, struct my_decl*); +void my_ctranslate_stmt(struct my_compiler*, struct my_node*); +void my_ctranslate_str(struct my_compiler*, unsigned char *); +void my_ctranslate_struct(struct my_compiler*, struct my_decl*); +void my_ctranslate_type(struct my_compiler*, struct my_type*, unsigned char *, unsigned long ); +void my_ctranslate_vars(struct my_compiler*, struct my_node*); +void my_ctranslate_zero(struct my_compiler*, struct my_type*); +unsigned long my_dec2int(unsigned char *, unsigned long , unsigned long *); +void my_defenum(struct my_compiler*, struct my_node*); +struct my_decl* my_defextern(struct my_compiler*, struct my_node*); +void my_defstruct(struct my_compiler*, struct my_node*); +void my_defun(struct my_compiler*, struct my_node*); +void my_die(unsigned char *); +unsigned long my_dup2(unsigned long , unsigned long ); +void my_emit(struct my_assembler*, unsigned long ); +void my_emit_add(struct my_assembler*); +void my_emit_and(struct my_assembler*); +void my_emit_blob(struct my_assembler*, unsigned char *, unsigned long ); +void my_emit_builtin(struct my_compiler*); +void my_emit_call(struct my_assembler*, unsigned long ); +void my_emit_div(struct my_assembler*); +void my_emit_eq(struct my_assembler*); +void my_emit_ge(struct my_assembler*); +void my_emit_gt(struct my_assembler*); +void my_emit_isr(struct my_compiler*); +void my_emit_jmp(struct my_assembler*, struct my_label*); +void my_emit_jz(struct my_assembler*, struct my_label*); +void my_emit_kstart(struct my_assembler*); +void my_emit_lcall(struct my_assembler*, struct my_label*, unsigned long ); +void my_emit_le(struct my_assembler*); +void my_emit_lea(struct my_assembler*, unsigned long ); +void my_emit_load(struct my_assembler*, struct my_type*); +void my_emit_lsh(struct my_assembler*); +void my_emit_lt(struct my_assembler*); +void my_emit_mod(struct my_assembler*); +void my_emit_mul(struct my_assembler*); +void my_emit_ne(struct my_assembler*); +void my_emit_neg(struct my_assembler*); +void my_emit_not(struct my_assembler*); +void my_emit_num(struct my_assembler*, unsigned long ); +void my_emit_or(struct my_assembler*); +void my_emit_pop(struct my_assembler*, unsigned long ); +void my_emit_preamble(struct my_assembler*, unsigned long , unsigned long ); +void my_emit_ptr(struct my_assembler*, struct my_label*); +void my_emit_restorer(struct my_assembler*); +void my_emit_ret(struct my_assembler*); +void my_emit_rsh(struct my_assembler*); +void my_emit_ssr(struct my_compiler*); +void my_emit_store(struct my_assembler*, struct my_type*); +void my_emit_str(struct my_assembler*, unsigned char *); +void my_emit_sub(struct my_assembler*); +void my_emit_syscall(struct my_assembler*); +void my_emit_ud(struct my_assembler*); +void my_emit_xor(struct my_assembler*); +void my_enter(struct my_peg*, unsigned long ); +unsigned long my_exec(unsigned char *, unsigned char **, unsigned char **); +void my_exit(unsigned long ); +void my_fail(struct my_peg*); +void my_fclose(struct my_file*); +unsigned long my_fdgetc(unsigned long ); +void my_fdputc(unsigned long , unsigned long ); +void my_fdputd(unsigned long , unsigned long ); +void my_fdputh(unsigned long , unsigned long ); +void my_fdputh16(unsigned long , unsigned long ); +void my_fdputh32(unsigned long , unsigned long ); +void my_fdputh64(unsigned long , unsigned long ); +void my_fdputh8(unsigned long , unsigned long ); +void my_fdputhn(unsigned long , unsigned long , unsigned long ); +void my_fdputs(unsigned long , unsigned char *); +void my_fdxxd(unsigned long , unsigned char *, unsigned long ); +void my_ffill(struct my_file*); +void my_fflush(struct my_file*); +unsigned long my_fgetc(struct my_file*); +unsigned long my_fgets(struct my_file*, unsigned char *, unsigned long ); +void my_fillpos(struct my_parser*, struct my_node*); +struct my_decl* my_find(struct my_compiler*, unsigned char *, unsigned char *, unsigned long ); +struct my_decl* my_first_decl(struct my_compiler*); +void my_fixup(struct my_assembler*, unsigned char *, unsigned long ); +void my_fixup_label(struct my_assembler*, struct my_label*); +void my_flush_coutput(struct my_compiler*); +struct my_file* my_fopen(unsigned long , struct my_alloc*); +unsigned long my_fork(void); +void my_fputb(struct my_file*, unsigned char *, unsigned long ); +void my_fputc(struct my_file*, unsigned long ); +void my_fputd(struct my_file*, unsigned long ); +void my_fputs(struct my_file*, unsigned char *); +unsigned char * my_freadall(struct my_file*, unsigned long *); +void my_free(struct my_alloc*, unsigned char *); +void my_fseek(struct my_file*, unsigned long ); +unsigned long my_fstat(unsigned long , unsigned char *); +unsigned long my_get(struct my_peg*); +unsigned long my_getdirents(unsigned long , unsigned char *, unsigned long ); +unsigned long my_hex2int(unsigned char *, unsigned long , unsigned long *); +unsigned long my_hexdig(unsigned long , unsigned long *); +unsigned long my_hoist_locals(struct my_compiler*, struct my_decl*, struct my_node*, unsigned long ); +void my_layout_struct(struct my_compiler*, struct my_decl*); +void my_leave(struct my_peg*, unsigned long ); +unsigned long my_listen(unsigned long , unsigned long ); +unsigned long my_literal(struct my_peg*, unsigned char *); +unsigned long my_lseek(unsigned long , unsigned long , unsigned long ); +void my_main(unsigned long , unsigned char **, unsigned char **); +unsigned long my_memcmp(unsigned char *, unsigned char *, unsigned long ); +void my_memcpy(unsigned char *, unsigned char *, unsigned long ); +void my_memset(unsigned char *, unsigned long , unsigned long ); +unsigned long my_mkdir(unsigned char *); +struct my_label* my_mklabel(struct my_assembler*); +struct my_node* my_mknode(struct my_parser*, unsigned long , struct my_node*, struct my_node*); +struct my_node* my_mknode0(struct my_parser*, unsigned long ); +struct my_node* my_mknode1(struct my_parser*, unsigned long , struct my_node*); +struct my_type* my_mktype(struct my_compiler*, unsigned long , struct my_type*, struct my_type*, struct my_decl*); +struct my_type* my_mktype0(struct my_compiler*, unsigned long ); +struct my_type* my_mktype1(struct my_compiler*, unsigned long , struct my_type*); +struct my_type* my_mktype2(struct my_compiler*, unsigned long , struct my_type*, struct my_type*); +struct my_type* my_mktype_struct(struct my_compiler*, struct my_decl*); +unsigned long my_mmap(unsigned long , unsigned long , unsigned long , unsigned long , unsigned long , unsigned long ); +unsigned long my_munmap(unsigned long , unsigned long ); +struct my_decl* my_next_decl(struct my_compiler*, struct my_decl*); +unsigned char * my_node_to_str(unsigned long ); +unsigned long my_open(unsigned char *, unsigned long , unsigned long ); +void my_open_coutput(struct my_compiler*, unsigned char *); +void my_open_output(struct my_assembler*, unsigned char *); +unsigned long my_p_add_expr(struct my_peg*); +unsigned long my_p_add_op(struct my_peg*); +unsigned long my_p_and_op(struct my_peg*); +unsigned long my_p_arg_decl(struct my_peg*); +unsigned long my_p_assign_stmt(struct my_peg*); +unsigned long my_p_band_op(struct my_peg*); +unsigned long my_p_bnot_op(struct my_peg*); +unsigned long my_p_bool_expr(struct my_peg*); +unsigned long my_p_bor_op(struct my_peg*); +unsigned long my_p_break(struct my_peg*); +unsigned long my_p_break_stmt(struct my_peg*); +unsigned long my_p_byte(struct my_peg*); +unsigned long my_p_call_expr(struct my_peg*); +unsigned long my_p_cast_expr(struct my_peg*); +unsigned long my_p_char(struct my_peg*); +unsigned long my_p_comp_expr(struct my_peg*); +unsigned long my_p_compound_stmt(struct my_peg*); +unsigned long my_p_continue(struct my_peg*); +unsigned long my_p_continue_stmt(struct my_peg*); +unsigned long my_p_dec(struct my_peg*); +unsigned long my_p_deref_op(struct my_peg*); +unsigned long my_p_div_op(struct my_peg*); +unsigned long my_p_elif_stmt(struct my_peg*); +unsigned long my_p_else(struct my_peg*); +unsigned long my_p_else_stmt(struct my_peg*); +unsigned long my_p_empty_stmt(struct my_peg*); +unsigned long my_p_enum(struct my_peg*); +unsigned long my_p_enum_decl(struct my_peg*); +unsigned long my_p_enum_item(struct my_peg*); +unsigned long my_p_eq_op(struct my_peg*); +unsigned long my_p_expr(struct my_peg*); +unsigned long my_p_expr_stmt(struct my_peg*); +unsigned long my_p_func(struct my_peg*); +unsigned long my_p_func_decl(struct my_peg*); +unsigned long my_p_func_type(struct my_peg*); +unsigned long my_p_ge_op(struct my_peg*); +unsigned long my_p_goto(struct my_peg*); +unsigned long my_p_goto_stmt(struct my_peg*); +unsigned long my_p_grammar(struct my_peg*); +unsigned long my_p_gt_op(struct my_peg*); +unsigned long my_p_hex(struct my_peg*); +unsigned long my_p_ident(struct my_peg*); +unsigned long my_p_if(struct my_peg*); +unsigned long my_p_if_stmt(struct my_peg*); +unsigned long my_p_index_expr(struct my_peg*); +unsigned long my_p_int(struct my_peg*); +unsigned long my_p_label_stmt(struct my_peg*); +unsigned long my_p_le_op(struct my_peg*); +unsigned long my_p_loop(struct my_peg*); +unsigned long my_p_loop_stmt(struct my_peg*); +unsigned long my_p_lsh_op(struct my_peg*); +unsigned long my_p_lt_op(struct my_peg*); +unsigned long my_p_member_decl(struct my_peg*); +unsigned long my_p_member_expr(struct my_peg*); +unsigned long my_p_mod_op(struct my_peg*); +unsigned long my_p_mul_expr(struct my_peg*); +unsigned long my_p_mul_op(struct my_peg*); +unsigned long my_p_ne_op(struct my_peg*); +unsigned long my_p_neg_op(struct my_peg*); +unsigned long my_p_not_op(struct my_peg*); +unsigned long my_p_or_op(struct my_peg*); +unsigned long my_p_pos_op(struct my_peg*); +unsigned long my_p_post_expr(struct my_peg*); +unsigned long my_p_primary(struct my_peg*); +unsigned long my_p_ptr_type(struct my_peg*); +unsigned long my_p_ref_op(struct my_peg*); +unsigned long my_p_reserved(struct my_peg*); +unsigned long my_p_return(struct my_peg*); +unsigned long my_p_return_stmt(struct my_peg*); +unsigned long my_p_rsh_op(struct my_peg*); +unsigned long my_p_shift_expr(struct my_peg*); +unsigned long my_p_sizeof(struct my_peg*); +unsigned long my_p_sizeof_expr(struct my_peg*); +unsigned long my_p_sp(struct my_peg*); +unsigned long my_p_stmt(struct my_peg*); +unsigned long my_p_str(struct my_peg*); +unsigned long my_p_struct(struct my_peg*); +unsigned long my_p_struct_decl(struct my_peg*); +unsigned long my_p_sub_op(struct my_peg*); +unsigned long my_p_type(struct my_peg*); +unsigned long my_p_unary_expr(struct my_peg*); +unsigned long my_p_var(struct my_peg*); +unsigned long my_p_var_stmt(struct my_peg*); +unsigned long my_p_void(struct my_peg*); +unsigned long my_p_xor_op(struct my_peg*); +struct my_node* my_parse(struct my_parser*, unsigned char *); +void my_peg_free(struct my_peg*); +struct my_peg* my_peg_new(unsigned char *, unsigned char *, unsigned long , struct my_alloc*); +struct my_peg_node* my_peg_parse(struct my_peg*, unsigned long ); +void my_peg_reset(struct my_peg*, unsigned char *, unsigned char *, unsigned long ); +void my_peg_show(struct my_file*, struct my_peg_node*); +unsigned long my_pipe(unsigned long *, unsigned long *); +unsigned long my_poll(unsigned long *, unsigned long , unsigned long ); +struct my_type* my_prototype(struct my_compiler*, struct my_node*); +void my_putchar(struct my_assembler*, unsigned long ); +unsigned long my_read(unsigned long , unsigned char *, unsigned long ); +unsigned char * my_readall(unsigned long , unsigned long *, struct my_alloc*); +struct my_node* my_reconstruct(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_add(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_arg_decl(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_args(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_assign(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_bool(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_break(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_char(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_comp(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_compound(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_continue(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_dec(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_empty(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_enum(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_enum_item(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_expr(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_expr_stmt(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_func(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_func_type(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_goto(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_hex(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_ident(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_if(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_intern(struct my_parser*, struct my_peg_node*, unsigned char *, unsigned long ); +struct my_node* my_reconstruct_label(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_loop(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_member_decl(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_member_list(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_mul(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_post(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_primary(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_return(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_shift(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_sizeof(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_stmt(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_str(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_struct(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_type(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_unary(struct my_parser*, struct my_peg_node*); +struct my_node* my_reconstruct_var(struct my_parser*, struct my_peg_node*); +unsigned long my_rename(unsigned char *, unsigned char *); +void my_reserve(struct my_assembler*, unsigned long ); +void my_reverse(unsigned char *, unsigned long ); +void my_setup_alloc(struct my_alloc*); +struct my_assembler* my_setup_assembler(struct my_alloc*); +struct my_parser* my_setup_parser(struct my_alloc*); +void my_show_node(struct my_file*, struct my_node*); +unsigned long my_sigaction(unsigned long , struct my_sigaction*, struct my_sigaction*); +unsigned long my_socket(unsigned long , unsigned long , unsigned long ); +unsigned long my_strcmp(unsigned char *, unsigned char *); +unsigned long my_strlen(unsigned char *); +unsigned long my_syscall(unsigned long , unsigned long , unsigned long , unsigned long , unsigned long , unsigned long , unsigned long ); +unsigned char * my_tag_to_str(unsigned long ); +unsigned long my_type_isint(struct my_type*); +unsigned long my_type_isprim(struct my_type*); +unsigned long my_type_sizeof(struct my_compiler*, struct my_type*); +unsigned long my_unescape(unsigned char *, unsigned long *, unsigned long , unsigned long *); +unsigned long my_unhex(unsigned char *, unsigned char *); +void my_unify(struct my_compiler*, struct my_type*, struct my_type*); +unsigned long my_unlink(unsigned char *); +unsigned long my_wait(unsigned long , unsigned long *, unsigned long ); +unsigned long my_write(unsigned long , unsigned char *, unsigned long ); +void my_writeout(struct my_assembler*, struct my_label*, struct my_label*); +void my_xxd_line(unsigned char *, unsigned long , unsigned char *, unsigned long ); +void my__start(unsigned long my_argc, unsigned char ** my_argv, unsigned char ** my_envp) +{ + (my_main)((my_argc),(my_argv),(my_envp)); + (my_exit)((0UL)); +} +unsigned long my_accept(unsigned long my_fd, unsigned char * my_addr, unsigned long * my_len) +{ + return (my_syscall)((43UL),(my_fd),((unsigned long )my_addr),((unsigned long )my_len),(0UL),(0UL),(0UL)); +} +void my_addfixup(struct my_assembler* my_c, struct my_label* my_l) +{ + struct my_fixup* my_f = 0; + unsigned char * my_here = 0; + if ((unsigned long)(((long)(((my_c)->my_text_end)->my_fill))<((long)(4UL)))) { + (my_die)(((unsigned char *)"invalid fixup")); + } + (my_here)=(&((((my_c)->my_text_end)->my_buf)[(unsigned long )(((unsigned long)(((my_c)->my_text_end)->my_fill))-((unsigned long)(4UL)))])); + if ((my_l)->my_fixed) { + (my_fixup)((my_c),(my_here),((unsigned long )(((unsigned long)((my_l)->my_at))-((unsigned long)((my_c)->my_at))))); + } else { + (my_f)=((struct my_fixup*)(my_alloc)(((my_c)->my_a),(24UL))); + ((my_f)->my_next)=((my_l)->my_fix); + ((my_f)->my_ptr)=(my_here); + ((my_f)->my_at)=((my_c)->my_at); + ((my_l)->my_fix)=(my_f); + } +} +unsigned char *my_alloc(struct my_alloc* my_c, unsigned long my_size) +{ + struct my_page* my_page = 0; + unsigned long my_mret = 0; + unsigned char * my_ret = 0; + unsigned long my_psize = 0; + if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid alloc")); + } + if ((unsigned long)(((long)(my_size))>=((long)(2048UL)))) { + (my_size)=((unsigned long )(((unsigned long)(my_size))+((unsigned long)(4095UL)))); + (my_size)=((unsigned long )(((unsigned long)(my_size))&((unsigned long)((unsigned long )(~(unsigned long)(4095UL)))))); + (my_mret)=((my_mmap)((0UL),(my_size),(3UL),(34UL),((unsigned long )(-(unsigned long)(1UL))),(0UL))); + if ((unsigned long)(((long)(my_mret))==((long)((unsigned long )(-(unsigned long)(1UL)))))) { + (my_die)(((unsigned char *)"out of memory")); + } + (my_ret)=((unsigned char *)my_mret); + return my_ret; + } + (my_page)=((my_c)->my_page); + if (my_page) { + if ((unsigned long)(((long)(my_size))<=((long)((unsigned long )(((unsigned long)((my_page)->my_size))-((unsigned long)((my_page)->my_fill))))))) { + (my_mret)=((unsigned long )(((unsigned long)((unsigned long )(my_page)->my_ptr))+((unsigned long)((my_page)->my_fill)))); + ((my_page)->my_fill)=((unsigned long )(((unsigned long)((my_page)->my_fill))+((unsigned long)(my_size)))); + (my_ret)=((unsigned char *)my_mret); + return my_ret; + } + } + (my_psize)=((unsigned long )(((long)(64UL))*((long)(1024UL)))); + (my_mret)=((my_mmap)((0UL),(my_psize),(3UL),(34UL),((unsigned long )(-(unsigned long)(1UL))),(0UL))); + if ((unsigned long)(((long)(my_mret))==((long)((unsigned long )(-(unsigned long)(1UL)))))) { + (my_die)(((unsigned char *)"out of memory")); + } + (my_page)=((struct my_page*)my_mret); + ((my_page)->my_ptr)=((unsigned char *)&((my_page)[1UL])); + (my_ret)=((my_page)->my_ptr); + ((my_page)->my_size)=((unsigned long )(((unsigned long)(my_psize))-((unsigned long)(24UL)))); + ((my_page)->my_fill)=(my_size); + ((my_c)->my_page)=(my_page); + return my_ret; +} +unsigned long my_any(struct my_peg* my_c) +{ + unsigned long my_ch = 0; + (my_ch)=((my_get)((my_c))); + if ((unsigned long)(((long)(my_ch))==((long)((unsigned long )(-(unsigned long)(1UL)))))) { + (my_fail)((my_c)); + return 0UL; + } + return 1UL; +} +void my_as_emit(struct my_assembler* my_a, unsigned long my_b) +{ + (my_emit)((my_a),(my_b)); +} +void my_as_jmp(struct my_assembler* my_a, unsigned long my_op, struct my_label* my_l) +{ + (my_reserve)((my_a),(16UL)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),(0UL)); + (my_as_emit)((my_a),(0UL)); + (my_as_emit)((my_a),(0UL)); + (my_as_emit)((my_a),(0UL)); + (my_addfixup)((my_a),(my_l)); +} +void my_as_modm(struct my_assembler* my_a, unsigned long my_op, unsigned long my_b, unsigned long my_i, unsigned long my_s, unsigned long my_d) +{ + (my_as_modrm)((my_a),((unsigned long )(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long )(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b),(my_i),(my_s),(my_d)); +} +void my_as_modr(struct my_assembler* my_a, unsigned long my_op, unsigned long my_b) +{ + (my_as_modrr)((my_a),((unsigned long )(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long )(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b)); +} +void my_as_modra(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r, unsigned long my_d) +{ + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)(my_R_RSP))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_R_RSP))<<((unsigned long)(3UL)))))+((unsigned long)(my_R_RBP))))); + (my_as_emit)((my_a),(my_d)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_d))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_d))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_d))>>((unsigned long)(24UL))))); +} +void my_as_modri(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r, unsigned long my_x) +{ + if ((unsigned long)(((unsigned long)(((long)(my_x))<((long)((unsigned long )(-(unsigned long)((unsigned long )(((unsigned long)(1UL))<<((unsigned long)(31UL)))))))))||((unsigned long)(((long)(my_x))>=((long)((unsigned long )(((unsigned long)(1UL))<<((unsigned long)(31UL))))))))) { + (my_die)(((unsigned char *)"immediate too large")); + } + (my_as_modrr)((my_a),((unsigned long )(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long )(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_r)); + (my_as_emit)((my_a),(my_x)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(24UL))))); +} +void my_as_modrm(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r, unsigned long my_b, unsigned long my_i, unsigned long my_s, unsigned long my_d) +{ + unsigned long my_sib = 0; + unsigned long my_mod = 0; + unsigned long my_rm = 0; + unsigned long my_dw = 0; + if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((long)(my_r))>((long)(15UL)))))) { + (my_die)(((unsigned char *)"invalid reg")); + } + (my_rm)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))); + if ((unsigned long)(((long)(my_d))!=((long)(0UL)))) { + if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)((unsigned long )(-(unsigned long)(128UL))))))&&((unsigned long)(((long)(my_d))<=((long)(127UL)))))) { + (my_mod)=(1UL); + (my_dw)=(1UL); + } else { + (my_mod)=(2UL); + (my_dw)=(4UL); + } + } else { + (my_mod)=(0UL); + (my_dw)=(0UL); + } + if ((unsigned long)(((long)(my_mod))==((long)(0UL)))) { + if ((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((long)(my_b))>((long)(16UL)))))) { + (my_die)(((unsigned char *)"invalid reg")); + } + if (my_s) { + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_die)(((unsigned char *)"invalid base")); + } + if ((unsigned long)(((long)(my_i))==((long)(my_R_RSP)))) { + (my_die)(((unsigned char *)"invalid index")); + } + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else { + if ((unsigned long)(((long)(my_i))!=((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid index")); + } + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_mod)=(0UL); + (my_dw)=(4UL); + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RSP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R12)))))) { + (my_s)=(1UL); + (my_i)=(my_R_RSP); + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RBP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R13)))))) { + (my_mod)=(1UL); + (my_dw)=(1UL); + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); + } else { + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)((unsigned long )(((unsigned long)(my_b))&((unsigned long)(7UL))))))); + } + } + } else { + if ((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((unsigned long)(((long)(my_b))>((long)(16UL))))||((unsigned long)(((unsigned long)(((long)(my_i))<((long)(0UL))))||((unsigned long)(((long)(my_i))>((long)(15UL)))))))))) { + (my_die)(((unsigned char *)"invalid reg")); + } + if (my_s) { + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_die)(((unsigned char *)"invalid base")); + } + if ((unsigned long)(((long)(my_i))==((long)(my_R_RSP)))) { + (my_die)(((unsigned char *)"invalid index")); + } + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else { + if ((unsigned long)(((long)(my_i))!=((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid index")); + } + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_mod)=(0UL); + (my_dw)=(4UL); + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RSP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R12)))))) { + (my_s)=(1UL); + (my_i)=(my_R_RSP); + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else { + (my_rm)=((unsigned long )(((unsigned long)(my_rm))+((unsigned long)((unsigned long )(((unsigned long)(my_b))&((unsigned long)(7UL))))))); + } + } + } + (my_as_rex)((my_a),(my_op),(my_r),(my_i),(my_b)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_mod))<<((unsigned long)(6UL)))))+((unsigned long)(my_rm))))); + if (my_s) { + (my_sib)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_i))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)((unsigned long )(((unsigned long)(my_b))&((unsigned long)(7UL))))))); + if ((unsigned long)(((long)(my_s))==((long)(2UL)))) { + (my_sib)=((unsigned long )(((unsigned long)(my_sib))+((unsigned long)(64UL)))); + } else if ((unsigned long)(((long)(my_s))==((long)(4UL)))) { + (my_sib)=((unsigned long )(((unsigned long)(my_sib))+((unsigned long)(128UL)))); + } else if ((unsigned long)(((long)(my_s))==((long)(8UL)))) { + (my_sib)=((unsigned long )(((unsigned long)(my_sib))+((unsigned long)(192UL)))); + } else if ((unsigned long)(((long)(my_s))!=((long)(1UL)))) { + (my_die)(((unsigned char *)"invalid scale")); + } + (my_as_emit)((my_a),(my_sib)); + } + if ((unsigned long)(((long)(my_dw))==((long)(1UL)))) { + (my_as_emit)((my_a),(my_d)); + } else if ((unsigned long)(((long)(my_dw))==((long)(4UL)))) { + (my_as_emit)((my_a),(my_d)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_d))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_d))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_d))>>((unsigned long)(24UL))))); + } +} +void my_as_modrr(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r, unsigned long my_b) +{ + if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((unsigned long)(((long)(my_r))>((long)(15UL))))||((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((long)(my_b))>((long)(15UL)))))))))) { + (my_die)(((unsigned char *)"invalid reg")); + } + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(my_b)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(192UL))+((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL))))))))+((unsigned long)((unsigned long )(((unsigned long)(my_b))&((unsigned long)(7UL)))))))); +} +void my_as_op(struct my_assembler* my_a, unsigned long my_op) +{ + if ((unsigned long)(((long)(my_op))>((long)(255UL)))) { + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_op))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),(my_op)); + } else { + (my_as_emit)((my_a),(my_op)); + } +} +void my_as_opr(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r) +{ + if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((long)(my_r))>((long)(15UL)))))) { + (my_die)(((unsigned char *)"invalid reg")); + } + if ((unsigned long)(((unsigned long)(((long)(my_op))!=((long)(my_OP_PUSHR))))&&((unsigned long)(((unsigned long)(((long)(my_op))!=((long)(my_OP_POPR))))||((unsigned long)(((long)(my_r))>((long)(7UL)))))))) { + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); + } + (my_as_op)((my_a),((unsigned long )(((unsigned long)(my_op))+((unsigned long)((unsigned long )(((unsigned long)(my_r))&((unsigned long)(7UL)))))))); +} +void my_as_opri64(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r, unsigned long my_x) +{ + if ((unsigned long)(((long)(my_op))!=((long)(my_OP_MOVABS)))) { + (my_die)(((unsigned char *)"only movabs")); + } + (my_as_opr)((my_a),(my_op),(my_r)); + (my_as_emit)((my_a),(my_x)); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(24UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(32UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(40UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(48UL))))); + (my_as_emit)((my_a),((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(56UL))))); +} +void my_as_rex(struct my_assembler* my_a, unsigned long my_op, unsigned long my_r, unsigned long my_i, unsigned long my_b) +{ + unsigned long my_w = 0; + if ((my_a)->my_bits32) { + return; + } + (my_w)=(8UL); + if ((unsigned long)(((unsigned long)(((long)(my_op))==((long)(my_OP_LOADB))))||((unsigned long)(((long)(my_op))==((long)(my_OP_STOREB)))))) { + (my_w)=(0UL); + } + (my_as_emit)((my_a),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(64UL))+((unsigned long)(my_w)))))+((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_r))>>((unsigned long)(1UL)))))&((unsigned long)(4UL))))))))+((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_i))>>((unsigned long)(2UL)))))&((unsigned long)(2UL))))))))+((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_b))>>((unsigned long)(3UL)))))&((unsigned long)(1UL)))))))); +} +void my_assert(unsigned long my_x, unsigned char * my_msg) +{ + if ((unsigned long)(!(my_x))) { + (my_die)((my_msg)); + } +} +unsigned long my_bind(unsigned long my_fd, unsigned char * my_addr, unsigned long my_len) +{ + return (my_syscall)((49UL),(my_fd),((unsigned long )my_addr),((unsigned long )my_len),(0UL),(0UL),(0UL)); +} +void my_bzero(unsigned char * my_s, unsigned long my_size) +{ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { + break; + } + ((my_s)[my_i])=((unsigned char )0UL); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +void my_cdie(struct my_compiler* my_c, unsigned char * my_msg) +{ + (my_cshow_context)((my_c)); + (my_fdputs)((2UL),((unsigned char *)"cdie: ")); + (my_fdputs)((2UL),(my_msg)); + (my_fdputs)((2UL),((unsigned char *)"\012")); + (my_exit)((1UL)); +} +unsigned long my_charset(struct my_peg* my_c, unsigned char * my_s) +{ + unsigned long my_i = 0; + unsigned long my_ch = 0; + (my_ch)=((my_get)((my_c))); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(!((my_s)[my_i]))) { + (my_fail)((my_c)); + return 0UL; + } + if ((unsigned long)(((long)(my_ch))==((long)((unsigned long )(my_s)[my_i])))) { + break; + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + return 1UL; +} +void my_choice(struct my_peg* my_c) +{ + if ((unsigned long)(((long)((my_c)->my_sp))==((long)((my_c)->my_limit)))) { + (my_die)(((unsigned char *)"choice overflow")); + } + ((((my_c)->my_stack)[(my_c)->my_sp]).my_pos)=((my_c)->my_pos); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_depth)=((my_c)->my_depth); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_op)=((my_c)->my_op); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_tag)=((my_c)->my_tag); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_line)=((my_c)->my_line); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_col)=((my_c)->my_col); + ((my_c)->my_sp)=((unsigned long )(((unsigned long)((my_c)->my_sp))+((unsigned long)(1UL)))); +} +unsigned long my_close(unsigned long my_fd) +{ + return (my_syscall)((3UL),(my_fd),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +void my_commit(struct my_peg* my_c) +{ + if ((unsigned long)(((long)((my_c)->my_sp))==((long)(0UL)))) { + (my_die)(((unsigned char *)"commit underflow")); + } + ((my_c)->my_sp)=((unsigned long )(((unsigned long)((my_c)->my_sp))-((unsigned long)(1UL)))); +} +struct my_compiler*my_comp_setup(struct my_alloc* my_a) +{ + struct my_compiler* my_c = 0; + (my_c)=((struct my_compiler*)(my_alloc)((my_a),(72UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_p)=((my_setup_parser)((my_a))); + ((my_c)->my_filename)=((unsigned char *)0UL); + ((my_c)->my_lineno)=(0UL); + ((my_c)->my_colno)=(0UL); + ((my_c)->my_as)=((my_setup_assembler)((my_a))); + ((my_c)->my_decls)=((struct my_decl*)0UL); + ((my_c)->my_do_cout)=(0UL); + ((my_c)->my_cout)=((struct my_file*)0UL); + return my_c; +} +void my_compile(struct my_compiler* my_c, struct my_node* my_p) +{ + struct my_node* my_n = 0; + struct my_decl* my_d = 0; + unsigned long my_kind = 0; + (my_n)=(my_p); while (1) { - d = *link; - if (!d) { - break; - } - - c = cmp(name, d->name); - - if (c < 0) { - p = d; - link = &d->l; - } else if (c > 0) { - p = d; - link = &d->r; - } else { - return d; - } - } - - d = malloc(sizeof(*d)); - if (!d) { - die("out of memory"); - } - - d->name = name; - d->ftype = 0; - d->args = 0; - d->body = 0; - d->p = p; - d->l = 0; - d->r = 0; - d->label = mklabel(); - d->locals = 0; - d->vlocals = 0; - d->vargs = 0; - d->preamble = 0; - d->defined = 0; - - *link = d; - - return d; -} - -// Find a local by name -struct vdecl * -vfind(struct decl *f, unsigned char *name, int def) -{ - struct vdecl **link; - struct vdecl *d; - struct vdecl *p; - int c; - - p = 0; - link = &f->locals; + if ((unsigned long)(!(my_n))) { + break; + } + (my_kind)=(((my_n)->my_a)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STRUCT)))) { + (my_defstruct)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUM)))) { + (my_defenum)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_N_FUNC))))&&((unsigned long)(((long)(my_kind))!=((long)(my_N_FUNCDECL)))))) { + (my_cdie)((my_c),((unsigned char *)"invalid decl")); + } + (my_n)=((my_n)->my_b); + } + (my_n)=(my_p); while (1) { - d = *link; - if (!d) { - break; - } - - c = cmp(name, d->name); - - if (c < 0) { - p = d; - link = &d->l; - } else if (c > 0) { - p = d; - link = &d->r; - } else { - return d; - } - } - - if (!def) { - return 0; - } - - d = malloc(sizeof(*d)); - if (!d) { - die("out of memory"); - } - - d->name = name; - d->p = p; - d->l = 0; - d->r = 0; - d->t = 0; - d->next = 0; - d->size = 0; - d->offset = 0; - d->defined = 0; - - *link = d; - - return d; -} - -// Find a member by name -struct mdecl * -mfind(struct sdecl *s, unsigned char *name) -{ - struct mdecl **link; - struct mdecl *d; - struct mdecl *p; - int c; - - p = 0; - link = &s->mem; + if ((unsigned long)(!(my_n))) { + break; + } + (my_kind)=(((my_n)->my_a)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCDECL)))) { + (my_defextern)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNC)))) { + (my_defun)((my_c),((my_n)->my_a)); + } + (my_n)=((my_n)->my_b); + } + (my_d)=((my_first_decl)((my_c))); while (1) { - d = *link; - if (!d) { - break; - } - - c = cmp(name, d->name); - - if (c < 0) { - p = d; - link = &d->l; - } else if (c > 0) { - p = d; - link = &d->r; - } else { - return d; - } - } - - d = malloc(sizeof(*d)); - if (!d) { - die("out of memory"); - } - - d->name = name; - d->p = p; - d->l = 0; - d->r = 0; - d->t = 0; - d->next = 0; - d->offset = 0; - d->defined = 0; - - if (s->vmem_last) { - s->vmem_last->next = d; - } else { - s->vmem = d; - } - s->vmem_last = d; - - *link = d; - - return d; -} - -// Find a structure by name -struct sdecl * -sfind(unsigned char *name) -{ - struct sdecl **link; - struct sdecl *d; - struct sdecl *p; - int c; - - p = 0; - link = &structs; + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_struct_defined) { + (my_layout_struct)((my_c),(my_d)); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_d)=((my_first_decl)((my_c))); while (1) { - d = *link; - if (!d) { - break; - } - - c = cmp(name, d->name); - - if (c < 0) { - p = d; - link = &d->l; - } else if (c > 0) { - p = d; - link = &d->r; - } else { - return d; - } - } - - d = malloc(sizeof(*d)); - if (!d) { - die("out of memory"); - } - - d->name = name; - d->p = p; - d->l = 0; - d->r = 0; - d->mem = 0; - d->vmem_last = 0; - d->vmem = 0; - d->size = 0; - d->computed = 0; - d->defined = 0; - - *link = d; - - return d; -} - -// Find a enum by name -struct edecl * -efind(unsigned char *name, int def) -{ - struct edecl **link; - struct edecl *d; - struct edecl *p; - int c; - - p = 0; - link = &enums; + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_func_defined) { + (my_compile_func)((my_c),(my_d)); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } +} +void my_compile_expr(struct my_compiler* my_c, struct my_decl* my_d, struct my_node* my_n, unsigned long my_rhs) +{ + struct my_label* my_no = 0; + struct my_label* my_out = 0; + struct my_decl* my_v = 0; + unsigned long my_kind = 0; + ((my_c)->my_filename)=((my_n)->my_filename); + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=((my_n)->my_colno); + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"str is not an lexpr")); + } + (my_emit_str)(((my_c)->my_as),((my_n)->my_s)); + ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_PTR),((my_mktype0)((my_c),(my_TY_BYTE))))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"num is not an lexpr")); + } + (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"char is not an lexpr")); + } + (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"call is not an lexpr")); + } + if ((my_n)->my_b) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((my_n)->my_b) { + ((my_n)->my_t)=((my_mktype2)((my_c),(my_TY_ARG),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t))); + } else { + ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_ARG),(((my_n)->my_a)->my_t))); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CALL)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"call is not an lexpr")); + } + if ((my_n)->my_b) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + } + if ((unsigned long)(((long)(((my_n)->my_a)->my_kind))==((long)(my_N_IDENT)))) { + (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char *)0UL),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { + (my_cdie)((my_c),((unsigned char *)"type error")); + } + (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { + (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); + (((my_n)->my_a)->my_t)=((my_v)->my_var_type); + (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); + (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + } else if ((unsigned long)(!((my_strcmp)((((my_n)->my_a)->my_s),((unsigned char *)"_include"))))) { + (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char *)0UL),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_func_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no such function")); + } + (((my_n)->my_a)->my_t)=((my_v)->my_func_type); + (my_compile_include)((my_c),(my_n)); + } else { + (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char *)0UL),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_func_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no such function")); + } + (((my_n)->my_a)->my_t)=((my_v)->my_func_type); + (my_emit_lcall)(((my_c)->my_as),((my_v)->my_func_label),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + } + } else { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + } + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_FUNC)))) { + (my_cdie)((my_c),((unsigned char *)"calling not a function")); + } + if ((my_n)->my_b) { + (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),(((my_n)->my_b)->my_t)); + } else { + (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),((struct my_type*)0UL)); + } + ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_PTR)))) { + if ((unsigned long)(((long)(((((my_n)->my_a)->my_t)->my_val)->my_kind))!=((long)(my_TY_STRUCT)))) { + (my_cdie)((my_c),((unsigned char *)"dot not a struct")); + } + (my_v)=((my_find)((my_c),((((((my_n)->my_a)->my_t)->my_val)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); + (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); + } else { + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_STRUCT)))) { + (my_cdie)((my_c),((unsigned char *)"dot not a struct")); + } + (my_v)=((my_find)((my_c),(((((my_n)->my_a)->my_t)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); + } + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no such member")); + } + (my_emit_num)(((my_c)->my_as),((my_v)->my_member_offset)); + (my_emit_add)(((my_c)->my_as)); + ((my_n)->my_t)=((my_v)->my_member_type); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { + (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char *)0UL),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { + (my_emit_num)(((my_c)->my_as),((my_v)->my_enum_value)); + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + return; + } + (my_v)=((my_find)((my_c),((my_d)->my_name),((my_n)->my_s),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { + (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); + ((my_n)->my_t)=((my_v)->my_var_type); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + return; + } + (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char *)0UL),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_func_defined))) { + (my_emit_ptr)(((my_c)->my_as),((my_v)->my_func_label)); + ((my_n)->my_t)=((my_v)->my_func_type); + return; + } + (my_cdie)((my_c),((unsigned char *)"no such variable")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"assign is not an lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + (my_emit_store)(((my_c)->my_as),((my_n)->my_t)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"sizeof is not an lexpr")); + } + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_emit_num)(((my_c)->my_as),(1UL)); + } else { + (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),(((my_n)->my_a)->my_t)))); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"ref is not an lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_PTR),(((my_n)->my_a)->my_t))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_PTR)))) { + (my_cdie)((my_c),((unsigned char *)"deref not a pointer")); + } + ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_PTR)))) { + (my_cdie)((my_c),((unsigned char *)"not a pointer")); + } + if ((unsigned long)(!((my_type_isint)((((my_n)->my_b)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"index: not an int")); + } + ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); + if ((unsigned long)(((long)(((my_n)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_emit_num)(((my_c)->my_as),(1UL)); + } else { + (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),((my_n)->my_t)))); + } + (my_emit_mul)(((my_c)->my_as)); + (my_emit_add)(((my_c)->my_as)); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_lt)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"lt: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_gt)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"gt: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_le)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"le: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_ge)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"ge: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_eq)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"eq: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_ne)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"ne: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(0UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(0UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_b)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(0UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_b)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"pos: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_neg)(((my_c)->my_as)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"neg: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_not)(((my_c)->my_as)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_add)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"add: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_sub)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"sub: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_mul)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"mul: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_div)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"div: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_mod)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"mod: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_lsh)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"lsh: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_rsh)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"rsh: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_and)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"and: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_or)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"or: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_xor)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"xor: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not a primitive")); + } + ((my_n)->my_t)=((my_prototype)((my_c),((my_n)->my_b))); + } else { + (my_cdie)((my_c),((unsigned char *)"not an expression")); + } +} +void my_compile_func(struct my_compiler* my_c, struct my_decl* my_d) +{ + unsigned char * my_name = 0; + struct my_decl* my_v = 0; + struct my_type* my_t = 0; + unsigned long my_offset = 0; + struct my_node* my_n = 0; + unsigned long my_pragma = 0; + if ((unsigned long)(!((my_d)->my_func_def))) { + return; + } + (my_n)=(((((my_d)->my_func_def)->my_a)->my_b)->my_a); + (my_offset)=(16UL); while (1) { - d = *link; - if (!d) { - break; - } - - c = cmp(name, d->name); - - if (c < 0) { - p = d; - link = &d->l; - } else if (c > 0) { - p = d; - link = &d->r; - } else { - return d; - } - } - - if (!def) { - return 0; - } - - d = malloc(sizeof(*d)); - if (!d) { - die("out of memory"); - } - - d->name = name; - d->p = p; - d->l = 0; - d->r = 0; - d->val = 0; - d->defined = 0; - - *link = d; - - return d; -} - -struct type * -mktype(int kind, struct type *val, struct type *arg, struct sdecl *s) -{ - struct type *t; - - t = malloc(sizeof(*t)); - if (!t) { - die("out of memory"); - } - - t->s = s; - t->kind = kind; - t->val = val; - t->arg = arg; - - return t; -} - -// Convert a type node into a type -struct type * -prototype(struct node *n) -{ - struct type *a; - struct type *b; - struct sdecl *s; - int kind; - - if (!n) { - return 0; - } - - kind = n->kind; - if (kind == N_IDENT) { - if (!cmp(n->s, (unsigned char *)"void")) { - return mktype(TY_VOID, 0, 0, 0); - } - if (!cmp(n->s, (unsigned char *)"int")) { - return mktype(TY_INT, 0, 0, 0); - } - if (!cmp(n->s, (unsigned char *)"byte")) { - return mktype(TY_BYTE, 0, 0, 0); - } - - s = sfind(n->s); - - return mktype(TY_STRUCT, 0, 0, s); - } else if (kind == N_ARGLIST) { - a = prototype(n->a->b); - b = prototype(n->b); - - kind = a->kind; - if (kind != TY_INT && kind != TY_BYTE - && kind != TY_PTR && kind != TY_FUNC) { - die("not a ptr arg"); - } - - return mktype(TY_ARG, a, b, 0); - } else if (kind == N_FUNCTYPE) { - if (n->b) { - a = prototype(n->b); - } else { - a = mktype(TY_VOID, 0, 0, 0); - } - - b = prototype(n->a); - - kind = a->kind; - if (kind != TY_VOID && kind != TY_INT && kind != TY_BYTE - && kind != TY_PTR && kind != TY_FUNC) { - die("not a ptr return"); - } - - return mktype(TY_FUNC, a, b, 0); - } else if (kind == N_PTRTYPE) { - return mktype(TY_PTR, prototype(n->a), 0, 0); - } else { - die("prototype: invalid type"); - return 0; - } -} - -// Evaluate function declaration -struct decl * -declare(struct node *n) -{ - struct decl *d; - struct type *t; - d = find(n->a->s); - t = prototype(n->b); - filename = n->filename; - lineno = n->lineno; - if (d->ftype) { - unify(d->ftype, t); - } else { - d->ftype = t; - } - return d; -} - -// Function definition -void -define(struct node *n) -{ - struct decl *d; - - d = declare(n->a); - - if (d->defined) { - die("duplicate declaration"); - } - - d->body = n->b; - d->defined = 1; - d->args = n->a->b->a; -} - -struct decl *curfunc; -struct sdecl *curstruct; -struct vdecl **link_arg; -struct vdecl **link_local; - -int -type_isint(struct type *t) -{ - return t->kind == TY_INT || t->kind == TY_BYTE; -} - -int -type_isprim(struct type *t) -{ - return t->kind != TY_VOID && t->kind != TY_STRUCT; -} - -void -typeexpr(struct node *n) -{ - struct node *a; - struct type *t; - struct decl *d; - struct vdecl *v; - struct mdecl *m; - struct edecl *e; - int kind; - - kind = n->kind; - if (kind == N_STR) { - n->t = mktype(TY_PTR, mktype(TY_BYTE, 0, 0, 0), 0, 0); - } else if (kind == N_NUM) { - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_CHAR) { - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_CALL) { - typeexpr(n->a); - t = n->a->t; - if (t->kind != TY_FUNC) { - die("calling not a function"); - } - a = n->b; - t = t->arg; - while (1) { - if (!a || !t) { - break; - } - typeexpr(a->a); - unify(a->a->t, t->val); - a = a->b; - t = t->arg; - } - if (a || t) { - die("wrong number of arguments"); - } - n->t = n->a->t->val; - } else if (kind == N_DOT) { - typeexpr(n->a); - t = n->a->t; - if (t->kind == TY_PTR) { - t = t->val; - } - if (t->kind != TY_STRUCT) { - die("dot not a struct"); - } - m = mfind(t->s, n->b->s); - if (!m->defined) { - die("no such member"); - } - n->t = m->t; - n->offset = m->offset; - } else if (kind == N_IDENT) { - e = efind(n->s, 0); - if (e) { - n->t = mktype(TY_INT, 0, 0, 0); - } else { - v = vfind(curfunc, n->s, 0); - if (v) { - n->t = v->t; - } else { - d = find(n->s); - if (!d->ftype) { - die("no such variable"); - } - n->t = d->ftype; - } - } - } else if (kind == N_ASSIGN) { - typeexpr(n->a); - typeexpr(n->b); - unify(n->a->t, n->b->t); - t = n->a->t; - n->t = t; - if (t->kind != TY_INT && t->kind != TY_BYTE - && t->kind != TY_PTR && t->kind != TY_FUNC) { - die("assignment not primitive"); - } - } else if (kind == N_SIZEOF) { - typeexpr(n->a); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_REF) { - typeexpr(n->a); - t = n->a->t; - n->t = mktype(TY_PTR, t, 0, 0); - } else if (kind == N_DEREF) { - typeexpr(n->a); - t = n->a->t; - if (t->kind != TY_PTR) { - die("deref not a pointer"); - } - t = t->val; - n->t = t; - } else if (kind == N_INDEX) { - typeexpr(n->a); - t = n->a->t; - if (t->kind != TY_PTR) { - die("not a pointer"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - n->t = t->val; - n->offset = type_sizeof(t->val); - if (t->val->kind == TY_BYTE) { - n->offset = 1; - } - } else if (kind == N_LT) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_GT) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_LE) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_GE) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_EQ) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_NE) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_ADD) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_SUB) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_MUL) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_DIV) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_MOD) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - unify(n->a->t, n->b->t); - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_LSH) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_RSH) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - typeexpr(n->b); - if (!type_isint(n->b->t)) { - die("not an int"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_BNOT) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_BOR) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_BAND) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_POS) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_NEG) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - n->t = n->a->t; - } else if (kind == N_NOT) { - typeexpr(n->a); - if (!type_isint(n->a->t)) { - die("not an int"); - } - n->t = n->a->t; - } else if (kind == N_AND) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_OR) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_XOR) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not an prim"); - } - typeexpr(n->b); - if (!type_isprim(n->b->t)) { - die("not an prim"); - } - n->t = mktype(TY_INT, 0, 0, 0); - } else if (kind == N_CAST) { - typeexpr(n->a); - if (!type_isprim(n->a->t)) { - die("not a primitive"); - } - n->t = prototype(n->b); - } else { - die("not an expression"); - } -} - -void -typelocal(struct node *n) -{ - unsigned char *name; - struct type *t; - struct vdecl *v; - int size; - - name = n->a->s; - t = prototype(n->b); - - v = vfind(curfunc, name, 1); - - if (v->defined) { - die("duplicate variable"); - } - - v->t = t; - v->defined = 1; - - size = type_sizeof(t); - - curfunc->preamble = curfunc->preamble + size; - v->offset = -curfunc->preamble; - - *link_local = v; - link_local = &v->next; -} - -void -typearg(struct node *n, int offset) -{ - unsigned char *name; - struct type *t; - struct vdecl *v; - - name = n->a->s; - t = prototype(n->b); - - v = vfind(curfunc, name, 1); - - if (v->defined) { - die("duplicate variable"); - } - - v->t = t; - v->defined = 1; - v->offset = offset; - - *link_arg = v; - link_arg = &v->next; -} - -// Type a statement -void -typestmt(struct node *n) -{ - int kind; - - if (!n) { - return; - } - - filename = n->filename; - lineno = n->lineno; - - kind = n->kind; - if (kind == N_CONDLIST) { - while (1) { - if (!n) { - break; - } - typestmt(n->a->a); - typestmt(n->a->b); - n = n->b; - } - } else if (kind == N_STMTLIST) { - while (1) { - if (!n) { - break; - } - typestmt(n->a); - n = n->b; - } - } else if (kind == N_LOOP) { - typestmt(n->a); - } else if (kind == N_RETURN) { - if (n->a) { - if (curfunc->ftype->val->kind == TY_VOID) { - die("returning a value in a void function"); - } - typeexpr(n->a); - unify(n->a->t, curfunc->ftype->val); - } else { - if (curfunc->ftype->val->kind != TY_VOID) { - die("returning void in a non void function"); - } - } - } else if (kind == N_VARDECL) { - typelocal(n); - } else if (kind != N_BREAK && kind != N_CONTINUE) { - typeexpr(n); - } -} - -// Find the first decl in a subtree -struct decl * -mindecl(struct decl *d) + if ((unsigned long)(!(my_n))) { + break; + } + (my_name)=((((my_n)->my_a)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),(((my_n)->my_a)->my_b))); + (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_v)->my_var_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate argument")); + } + ((my_v)->my_var_defined)=(1UL); + ((my_v)->my_var_type)=(my_t); + ((my_v)->my_var_offset)=(my_offset); + ((my_v)->my_var_def)=((my_n)->my_a); + (my_offset)=((unsigned long )(((unsigned long)(my_offset))+((unsigned long)(8UL)))); + (my_n)=((my_n)->my_b); + } + (my_offset)=((my_hoist_locals)((my_c),(my_d),(((my_d)->my_func_def)->my_b),(0UL))); + if ((unsigned long)(!((my_strcmp)(((my_d)->my_name),((unsigned char *)"_start"))))) { + (my_pragma)=(1UL); + } else if ((unsigned long)(!((my_strcmp)(((my_d)->my_name),((unsigned char *)"_kstart"))))) { + (my_pragma)=(2UL); + } else { + (my_pragma)=(0UL); + } + (my_emit_str)(((my_c)->my_as),((my_d)->my_name)); + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(my_offset),(my_pragma)); + (my_compile_stmt)((my_c),(my_d),(((my_d)->my_func_def)->my_b),((struct my_label*)0UL),((struct my_label*)0UL)); + (my_emit_num)(((my_c)->my_as),(0UL)); + if (my_pragma) { + (my_emit_ud)(((my_c)->my_as)); + } + (my_emit_ret)(((my_c)->my_as)); +} +void my_compile_include(struct my_compiler* my_c, struct my_node* my_n) +{ + unsigned char * my_filename = 0; + unsigned long my_fd = 0; + unsigned char * my_blob = 0; + unsigned long my_len = 0; + if ((unsigned long)(((long)((((my_n)->my_b)->my_a)->my_kind))!=((long)(my_N_STR)))) { + (my_die)(((unsigned char *)"non literal include")); + } + (my_filename)=((((my_n)->my_b)->my_a)->my_s); + (my_fd)=((my_open)((my_filename),(my_O_RDONLY),(0UL))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open include")); + } + (my_blob)=((my_readall)((my_fd),(&(my_len)),((my_c)->my_a))); + (my_close)((my_fd)); + (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RDI)); + (my_as_opri64)(((my_c)->my_as),(my_OP_MOVABS),(my_R_RAX),(my_len)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_emit_blob)(((my_c)->my_as),(my_blob),(my_len)); + (my_free)(((my_c)->my_a),(my_blob)); +} +void my_compile_stmt(struct my_compiler* my_c, struct my_decl* my_d, struct my_node* my_n, struct my_label* my_top, struct my_label* my_out) { + struct my_label* my_no = 0; + struct my_label* my_ifout = 0; + struct my_decl* my_v = 0; + unsigned long my_kind = 0; + if ((unsigned long)(!(my_n))) { + return; + } + ((my_c)->my_filename)=((my_n)->my_filename); + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=((my_n)->my_colno); + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + (my_ifout)=((my_mklabel)(((my_c)->my_as))); + (my_no)=((struct my_label*)0UL); + while (1) { + if (my_no) { + (my_fixup_label)(((my_c)->my_as),(my_no)); + } + if ((unsigned long)(!(my_n))) { + break; + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + if (((my_n)->my_a)->my_a) { + (my_compile_expr)((my_c),(my_d),(((my_n)->my_a)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + } + (my_compile_stmt)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_top),(my_out)); + (my_emit_jmp)(((my_c)->my_as),(my_ifout)); + (my_n)=((my_n)->my_b); + } + (my_fixup_label)(((my_c)->my_as),(my_ifout)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { while (1) { - if (!d || !d->l) { - return d; - } - d = d->l; + if ((unsigned long)(!(my_n))) { + break; + } + (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + (my_top)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_fixup_label)(((my_c)->my_as),(my_top)); + (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); + (my_emit_jmp)(((my_c)->my_as),(my_top)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { + if ((unsigned long)(!(my_out))) { + (my_cdie)((my_c),((unsigned char *)"break outside loop")); + } + (my_emit_jmp)(((my_c)->my_as),(my_out)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { + if ((unsigned long)(!(my_top))) { + (my_cdie)((my_c),((unsigned char *)"continue outside loop")); + } + (my_emit_jmp)(((my_c)->my_as),(my_top)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { + if ((my_n)->my_a) { + if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))==((long)(my_TY_VOID)))) { + (my_cdie)((my_c),((unsigned char *)"returning a value in a void function")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_d)->my_func_type)->my_val)); + } else { + if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))!=((long)(my_TY_VOID)))) { + (my_cdie)((my_c),((unsigned char *)"returning void in a non void function")); + } + (my_emit_num)(((my_c)->my_as),(0UL)); + } + (my_emit_ret)(((my_c)->my_as)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); + (my_fixup_label)(((my_c)->my_as),((my_v)->my_goto_label)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { + (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_goto_defined))))) { + (my_cdie)((my_c),((unsigned char *)"label not defined")); + } + (my_emit_jmp)(((my_c)->my_as),((my_v)->my_goto_label)); + } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { + (my_compile_expr)((my_c),(my_d),(my_n),(1UL)); + (my_emit_pop)(((my_c)->my_as),(1UL)); } } - -// Find the next declaration -struct decl * -nextdecl(struct decl *d) +struct my_node*my_concat_program(struct my_node* my_a, struct my_node* my_b) { - if (!d) { - return 0; + struct my_node* my_ret = 0; + if ((unsigned long)(!(my_a))) { + return my_b; } - - if (d->r) { - return mindecl(d->r); + if ((unsigned long)(!(my_b))) { + return my_a; } - + (my_ret)=(my_a); + while (1) { + if ((unsigned long)(!((my_a)->my_b))) { + break; + } + (my_a)=((my_a)->my_b); + } + ((my_a)->my_b)=(my_b); + return my_ret; +} +struct my_peg_node*my_construct(struct my_peg* my_c, unsigned long my_sp) +{ + unsigned long my_i = 0; + unsigned long my_j = 0; + unsigned long my_nargs = 0; + struct my_peg_node* my_n = 0; + struct my_peg_node** my_link = 0; + (((my_c)->my_nstack)[0UL])=((struct my_peg_node*)0UL); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)((my_c)->my_op)))) { + return ((my_c)->my_nstack)[0UL]; + } + if ((unsigned long)(((long)((((my_c)->my_out)[my_i]).my_tag))!=((long)(my_sp)))) { + (my_n)=((struct my_peg_node*)(my_alloc)(((my_c)->my_a),(64UL))); + ((my_n)->my_tag)=((((my_c)->my_out)[my_i]).my_tag); + ((my_n)->my_next)=((struct my_peg_node*)0UL); + ((my_n)->my_child)=((struct my_peg_node*)0UL); + ((my_n)->my_str)=(&(((my_c)->my_src)[(((my_c)->my_out)[my_i]).my_start])); + ((my_n)->my_len)=((unsigned long )(((unsigned long)((((my_c)->my_out)[my_i]).my_end))-((unsigned long)((((my_c)->my_out)[my_i]).my_start)))); + ((my_n)->my_filename)=((my_c)->my_filename); + ((my_n)->my_line)=((((my_c)->my_out)[my_i]).my_line); + ((my_n)->my_col)=((((my_c)->my_out)[my_i]).my_col); + (my_nargs)=((((my_c)->my_out)[my_i]).my_nargs); + if ((unsigned long)(((long)(my_nargs))>((long)((my_c)->my_np)))) { + (my_die)(((unsigned char *)"node underflow")); + } + (my_link)=(&((my_n)->my_child)); + (my_j)=((unsigned long )(((unsigned long)((my_c)->my_np))-((unsigned long)(my_nargs)))); while (1) { - if (!d->p) { - return 0; - } - if (d->p->l == d) { - return d->p; - } - d = d->p; + if ((unsigned long)(((long)(my_j))==((long)((my_c)->my_np)))) { + break; + } + if (((my_c)->my_nstack)[my_j]) { + (*(my_link))=(((my_c)->my_nstack)[my_j]); + (my_link)=(&((((my_c)->my_nstack)[my_j])->my_next)); + } + (my_j)=((unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))); + } + ((my_c)->my_np)=((unsigned long )(((unsigned long)((my_c)->my_np))-((unsigned long)(my_nargs)))); + if ((unsigned long)(((long)((my_c)->my_np))==((long)((my_c)->my_ncap)))) { + (my_die)(((unsigned char *)"node overflow")); + } + } else { + (my_n)=((struct my_peg_node*)0UL); + } + (((my_c)->my_nstack)[(my_c)->my_np])=(my_n); + ((my_c)->my_np)=((unsigned long )(((unsigned long)((my_c)->my_np))+((unsigned long)(1UL)))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); } } - -// Find the first declaration -struct decl * -firstdecl(void) +void my_copypos(struct my_node* my_n, struct my_peg_node* my_pn) { - return mindecl(decls); + ((my_n)->my_filename)=((my_pn)->my_filename); + ((my_n)->my_lineno)=((my_pn)->my_line); + ((my_n)->my_colno)=((my_pn)->my_col); } - -struct sdecl * -minsdecl(struct sdecl *d) +unsigned long my_count_args(struct my_compiler* my_c, struct my_type* my_t) { + unsigned long my_nargs = 0; + (my_nargs)=(0UL); while (1) { - if (!d || !d->l) { - return d; - } - d = d->l; + if ((unsigned long)(!(my_t))) { + break; } + (my_t)=((my_t)->my_arg); + (my_nargs)=((unsigned long )(((unsigned long)(my_nargs))+((unsigned long)(1UL)))); + } + return my_nargs; } - -struct sdecl * -sfirst(void) +void my_cshow_context(struct my_compiler* my_c) { - return minsdecl(structs); + (my_fdputs)((2UL),((unsigned char *)"on ")); + if ((my_c)->my_filename) { + (my_fdputs)((2UL),((my_c)->my_filename)); + } + (my_fdputs)((2UL),((unsigned char *)":")); + (my_fdputd)((2UL),((my_c)->my_lineno)); + (my_fdputs)((2UL),((unsigned char *)":")); + (my_fdputd)((2UL),((my_c)->my_colno)); + (my_fdputs)((2UL),((unsigned char *)"\012")); } - -struct sdecl * -snext(struct sdecl *d) +void my_ctranslate(struct my_compiler* my_c) { - if (!d) { - return 0; + struct my_decl* my_d = 0; + unsigned long my_seen = 0; + unsigned long my_has_enum = 0; + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#ifndef my__start\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#define my__start main\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#endif\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#ifndef my_syscall\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#define my_syscall syscall\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#endif\012")); + (my_d)=((my_first_decl)((my_c))); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_struct_defined) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"struct my_")); + (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_d)=((my_first_decl)((my_c))); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_struct_defined) { + (my_ctranslate_struct)((my_c),(my_d)); + } + (my_d)=((my_next_decl)((my_c),(my_d))); } - - if (d->r) { - return minsdecl(d->r); + (my_d)=((my_first_decl)((my_c))); + (my_has_enum)=(0UL); + (my_seen)=(0UL); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_enum_defined) { + if ((unsigned long)(!(my_has_enum))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"enum {\012")); + (my_has_enum)=(1UL); + } + if (my_seen) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)",\012")); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011my_")); + (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)" = ")); + (my_fputd)(((my_c)->my_cout),((my_d)->my_enum_value)); + (my_seen)=(1UL); } - + (my_d)=((my_next_decl)((my_c),(my_d))); + } + if (my_has_enum) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\012};\012")); + } + (my_d)=((my_first_decl)((my_c))); while (1) { - if (!d->p) { - return 0; - } - if (d->p->l == d) { - return d->p; - } - d = d->p; - } -} - -// Define a struct member -void -defmember(struct node *n) -{ - struct mdecl *m; - unsigned char *name; - - name = n->a->s; - - m = mfind(curstruct, name); - - if (m->defined) { - die("duplicate memeber"); - } - - m->defined = 1; - m->t = prototype(n->b); -} - -// Define a struct type -void -defstruct(struct node *n) -{ - struct sdecl *d; - unsigned char *name; - struct node *m; - - name = n->a->s; - - if (!cmp(name, (unsigned char *)"int")) { - die("int is reserved"); - } - - if (!cmp(name, (unsigned char *)"byte")) { - die("byte is reserved"); - } - - if (!cmp(name, (unsigned char *)"func")) { - die("func is reserved"); - } - - d = sfind(name); - if (d->defined) { - die("duplicate struct"); - } - - d->defined = 1; - - curstruct = d; - - m = n->b; + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_func_defined) { + (my_ctranslate_type)((my_c),((my_d)->my_func_type),((my_d)->my_name),(0UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_d)=((my_first_decl)((my_c))); while (1) { - if (!m) { - break; - } - - defmember(m->a); - - m = m->b; - } -} - -void -defenum(struct node *n) -{ - struct edecl *d; - int i; - - n = n->b; - i = 0; + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_func_defined) { + (my_ctranslate_func)((my_c),(my_d)); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_flush_coutput)((my_c)); +} +void my_ctranslate_expr(struct my_compiler* my_c, struct my_node* my_n) +{ + if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_STR)))) { + (my_ctranslate_str)((my_c),((my_n)->my_s)); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NUM)))) { + (my_fputd)(((my_c)->my_cout),((my_n)->my_n)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"UL")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_CHAR)))) { + (my_fputd)(((my_c)->my_cout),((my_n)->my_n)); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_CALL)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_n)=((my_n)->my_b); while (1) { - if (!n) { - break; - } - - d = efind(n->a->a->s, 1); - - if (d->defined) { - die("duplicate enum"); - } - - if (n->a->b) { - i = n->a->b->n; - } - - d->defined = 1; - d->val = i; - - i = i + 1; - n = n->b; - } -} - -int -type_sizeof(struct type *t) -{ - int kind; - - kind = t->kind; - if (kind == TY_INT) { - return 8; - } else if (kind == TY_BYTE) { - return 8; - } else if (kind == TY_PTR) { - return 8; - } else if (kind == TY_FUNC) { - return 8; - } else if (kind == TY_STRUCT) { - compute_struct(t->s); - return t->s->size; - } else { - die("sizeof: invalid type"); - return 0; - } -} - -// Depth first compute offset of struct members -void -compute_struct(struct sdecl *s) -{ - struct mdecl *m; - int size; - - if (s->computed) { - if (s->computed == 2) { - die("circular reference"); - } - return; - } - - s->computed = 2; - - size = 0; - - m = s->vmem; + if ((unsigned long)(!(my_n))) { + break; + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + (my_n)=((my_n)->my_b); + if (my_n) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)",")); + } + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_DOT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_PTR)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"->")); + } else { + (my_fputs)(((my_c)->my_cout),((unsigned char *)".")); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"my_")); + (my_fputs)(((my_c)->my_cout),(((my_n)->my_b)->my_s)); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_IDENT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"my_")); + (my_fputs)(((my_c)->my_cout),((my_n)->my_s)); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_ASSIGN)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")=(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_SIZEOF)))) { + (my_fputd)(((my_c)->my_cout),((my_type_sizeof)((my_c),(((my_n)->my_a)->my_t)))); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"UL")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_REF)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"&(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_DEREF)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"*(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_INDEX)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")[")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"]")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_LT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))<((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_LE)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))<=((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_GT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))>((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_GE)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))>=((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_EQ)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))==((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NE)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))!=((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_BNOT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)(!(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_BOR)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)((")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")||(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_BAND)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned long)((")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")&&(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_POS)))) { + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NEG)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(-(unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NOT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(~(unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_ADD)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))+((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_SUB)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))-((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_MUL)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))*((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_DIV)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))/((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_MOD)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))%((long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_LSH)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))<<((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_RSH)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))>>((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_AND)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))&((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_OR)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))|((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_XOR)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")(((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"))^((unsigned long)(")); + (my_ctranslate_expr)((my_c),((my_n)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")))")); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_CAST)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_ctranslate_type)((my_c),((my_n)->my_t),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + } else { + (my_fdputd)((2UL),((my_n)->my_kind)); + (my_die)(((unsigned char *)"invalid expr")); + } +} +void my_ctranslate_func(struct my_compiler* my_c, struct my_decl* my_d) +{ + struct my_node* my_n = 0; + struct my_type* my_ty = 0; + if ((my_d)->my_func_def) { + (my_ctranslate_type)((my_c),(((my_d)->my_func_type)->my_val),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"my_")); + (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + (my_n)=(((((my_d)->my_func_def)->my_a)->my_b)->my_a); + (my_ty)=(((my_d)->my_func_type)->my_arg); while (1) { - if (!m) { - break; - } - - m->offset = size; - size = size + type_sizeof(m->t); - - m = m->next; - } - - s->size = size; - s->computed = 1; -} - -// Evaluate declarations -void -typecheck(struct node *p) -{ - struct sdecl *s; - struct decl *d; - struct node *n; - int kind; - int offset; - - // Process declarations - n = p; + if ((unsigned long)(!(my_n))) { + break; + } + (my_ctranslate_type)((my_c),((my_ty)->my_val),((((my_n)->my_a)->my_a)->my_s),(1UL)); + (my_n)=((my_n)->my_b); + (my_ty)=((my_ty)->my_arg); + if (my_n) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)", ")); + } + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)")\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"{\012")); + (my_ctranslate_vars)((my_c),(((my_d)->my_func_def)->my_b)); + (my_ctranslate_stmt)((my_c),(((my_d)->my_func_def)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"}\012")); + } +} +void my_ctranslate_stmt(struct my_compiler* my_c, struct my_node* my_n) +{ + unsigned long my_kind = 0; + struct my_node* my_child = 0; + if ((unsigned long)(!(my_n))) { + return; + } + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011")); while (1) { - if (!n) { - break; - } - - kind = n->a->kind; - if (kind == N_FUNCDECL) { - declare(n->a); - } else if (kind == N_FUNC) { - define(n->a); - } else if (kind == N_STRUCT) { - defstruct(n->a); - } else if (kind == N_ENUM) { - defenum(n->a); - } else { - die("invalid decl"); - } - - n = n->b; - } - - // Allocate structs - s = sfirst(); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"if (")); + (my_ctranslate_expr)((my_c),(((my_n)->my_a)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)") {\012")); + (my_ctranslate_stmt)((my_c),(((my_n)->my_a)->my_b)); + (my_n)=((my_n)->my_b); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011}")); + if ((unsigned long)(!(my_n))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\012")); + break; + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)" else ")); + if ((unsigned long)(!(((my_n)->my_a)->my_a))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"{\012")); + (my_ctranslate_stmt)((my_c),(((my_n)->my_a)->my_b)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011}\012")); + break; + } + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { while (1) { - if (!s) { - break; - } - - compute_struct(s); - - s = snext(s); - } - - // Check types - d = firstdecl(); + if ((unsigned long)(!(my_n))) { + break; + } + (my_ctranslate_stmt)((my_c),((my_n)->my_a)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011while (1) {\012")); + (my_ctranslate_stmt)((my_c),((my_n)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011}\012")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011break;\012")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011continue;\012")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011return")); + if ((my_n)->my_a) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" ")); + (my_ctranslate_expr)((my_c),((my_n)->my_a)); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"my_")); + (my_fputs)(((my_c)->my_cout),(((my_n)->my_a)->my_s)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)":\012")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011goto ")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"my_")); + (my_fputs)(((my_c)->my_cout),(((my_n)->my_a)->my_s)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011")); + (my_ctranslate_expr)((my_c),(my_n)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } +} +void my_ctranslate_str(struct my_compiler* my_c, unsigned char * my_s) +{ + unsigned long my_i = 0; + unsigned long my_ch = 0; + (my_i)=(0UL); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(unsigned char *)\042")); while (1) { - if (!d) { - break; - } - - curfunc = d; - link_local = &d->vlocals; - link_arg = &d->vargs; - - offset = 16; - - n = d->args; - while (1) { - if (!n) { - break; - } - - typearg(n->a, offset); - - n = n->b; - offset = offset + 8; - } - - typestmt(d->body); - - d = nextdecl(d); - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Assembler // -/////////////////////////////////////////////////////////////////////////////// - -struct label { - struct label *next; - struct fix *fix; - int at; - int fixed; -}; - -struct fix { - struct fix *next; - unsigned char *ptr; - int at; -}; - -struct buf { - unsigned char *buf; - int fill; - int cap; - struct buf *next; -}; - -int at; -struct label *labels; -struct buf *text; -struct buf *text_end; - -// Create a new label -struct label * -mklabel(void) -{ - struct label *l; - - l = malloc(sizeof(*l)); - if (!l) { - die("out of memory"); - } - - l->next = labels; - l->fix = 0; - l->at = 0; - l->fixed = 0; - - labels = l; - - return l; -} - -// Reserve size in the output buffer -void -reserve(int n) -{ - unsigned char *m; - struct buf *b; - - if (text_end && text_end->cap - text_end->fill >= n) { - return; - } - - if (n < 4096) { - n = 4096; - } - - m = malloc(n); - if (!m) { - die("out of memory"); - } - - b = malloc(sizeof(*b)); - if (!b) { - die("out of memory"); - } - - b->buf = m; - b->fill = 0; - b->cap = n; - b->next = 0; - - if (text_end) { - text_end->next = b; - text_end = b; - } else { - text = b; - text_end = b; - } -} - -// Add a single byte to the output -void -emit(int c) -{ - reserve(1); - text_end->buf[text_end->fill] = c; - text_end->fill = text_end->fill + 1; - at = at + 1; -} - -// Fix a single reference -void -fixup(unsigned char *here, int delta) -{ - here[0] = delta; - here[1] = delta >> 8; - here[2] = delta >> 16; - here[3] = delta >> 24; -} - -// Add an new fixup for the current position -void -addfixup(struct label *l) -{ - struct fix *f; - unsigned char *here; - - reserve(4); - here = &text_end->buf[text_end->fill]; - - emit(0); - emit(0); - emit(0); - emit(0); - - if (l->fixed) { - fixup(here, l->at - at); - } else { - f = malloc(sizeof(*f)); - if (!f) { - die("out of memory"); - } - - f->next = l->fix; - f->ptr = here; - f->at = at; - - l->fix = f; - } -} - -// Fix references to a label to the current position -void -fixup_label(struct label *l) -{ - struct fix *f; - - if (l->fixed) { - die("already fixed"); - } - - l->at = at; - l->fixed = 1; - - f = l->fix; + if ((unsigned long)(!((my_s)[my_i]))) { + break; + } + (my_ch)=((unsigned long )(my_s)[my_i]); + if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { + (my_fputc)(((my_c)->my_cout),(92)); + (my_fputc)(((my_c)->my_cout),((unsigned long )(((unsigned long)(48))+((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_ch))>>((unsigned long)(6UL)))))&((unsigned long)(7UL)))))))); + (my_fputc)(((my_c)->my_cout),((unsigned long )(((unsigned long)(48))+((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_ch))>>((unsigned long)(3UL)))))&((unsigned long)(7UL)))))))); + (my_fputc)(((my_c)->my_cout),((unsigned long )(((unsigned long)(48))+((unsigned long)((unsigned long )(((unsigned long)(my_ch))&((unsigned long)(7UL)))))))); + } else { + (my_fputc)(((my_c)->my_cout),(my_ch)); + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\042")); +} +void my_ctranslate_struct(struct my_compiler* my_c, struct my_decl* my_d) +{ + struct my_decl* my_v = 0; + struct my_node* my_n = 0; + (my_fputs)(((my_c)->my_cout),((unsigned char *)"struct my_")); + (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)" {\012")); + (my_n)=(((my_d)->my_struct_def)->my_b); while (1) { - if (!f) { - break; - } - fixup(f->ptr, l->at - f->at); - f = f->next; - } -} - -void -emit_ptr(struct label *l) -{ - // lea %rax, [l] - emit(0x48); - emit(0x8d); - emit(0x05); - addfixup(l); - // push %rax - emit(0x50); -} - -void -emit_jmp(struct label *l) -{ - // jmp l - emit(0xe9); - addfixup(l); -} - -void -emit_num(long x) -{ - // movabs rdx, x - emit(0x48); - emit(0xba); - emit(x); - emit(x >> 8); - emit(x >> 16); - emit(x >> 24); - emit(x >> 32); - emit(x >> 40); - emit(x >> 48); - emit(x >> 56); - // push rdx - emit(0x52); -} - -void -emit_str(unsigned char *s) -{ - struct label *a; - struct label *b; - int i; - - a = mklabel(); - b = mklabel(); - - // jmp b - emit_jmp(b); - - // a: - fixup_label(a); - // .string s + if ((unsigned long)(!(my_n))) { + break; + } + (my_v)=((my_find)((my_c),((my_d)->my_name),((((my_n)->my_a)->my_a)->my_s),(0UL))); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011")); + (my_ctranslate_type)((my_c),((my_v)->my_member_type),((((my_n)->my_a)->my_a)->my_s),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + (my_n)=((my_n)->my_b); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"};\012")); +} +void my_ctranslate_type(struct my_compiler* my_c, struct my_type* my_ty, unsigned char * my_name, unsigned long my_ptr) +{ + struct my_type* my_arg = 0; + if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_VOID)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"void ")); + if ((unsigned long)((my_name)&&((my_name)[0UL]))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" my_")); + (my_fputs)(((my_c)->my_cout),(my_name)); + } + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_INT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"unsigned long ")); + if ((unsigned long)((my_name)&&((my_name)[0UL]))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" my_")); + (my_fputs)(((my_c)->my_cout),(my_name)); + } + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_BYTE)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"unsigned char ")); + if ((unsigned long)((my_name)&&((my_name)[0UL]))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" my_")); + (my_fputs)(((my_c)->my_cout),(my_name)); + } + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_PTR)))) { + (my_ctranslate_type)((my_c),((my_ty)->my_val),((unsigned char *)""),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"*")); + if ((unsigned long)((my_name)&&((my_name)[0UL]))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" my_")); + (my_fputs)(((my_c)->my_cout),(my_name)); + } + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_FUNC)))) { + (my_ctranslate_type)((my_c),((my_ty)->my_val),((unsigned char *)""),(1UL)); + if (my_ptr) { + (my_die)(((unsigned char *)"fixme cdecl order is hard")); + } + if ((unsigned long)((my_name)&&((my_name)[0UL]))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" my_")); + (my_fputs)(((my_c)->my_cout),(my_name)); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); + if (my_ptr) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"*")); + } + (my_arg)=((my_ty)->my_arg); + if (my_arg) { while (1) { - if (!*s) { - break; - } - emit(*s); - s = s + 1; - } - emit(0); - - // nop sled - emit(0x90); - emit(0x90); - emit(0x90); - emit(0x90); - emit(0x90); - emit(0x90); - emit(0x90); - emit(0x90); - - // b: - fixup_label(b); - // push a - emit_ptr(a); -} - -void -emit_pop(int n) -{ - n = n * 8; - // add rsp, 8*n - emit(0x48); - emit(0x81); - emit(0xc4); - emit(n); - emit(n >> 8); - emit(n >> 16); - emit(n >> 24); -} - -void -emit_preamble(int n, int start) -{ - int i; - if (start) { - // xor rbp, rbp - emit(0x48); - emit(0x33); - emit(0xed); - // mov rdi, [rsp] - emit(0x48); - emit(0x8b); - emit(0x3c); - emit(0x24); - // lea rsi, [rsp + 8] - emit(0x48); - emit(0x8d); - emit(0x74); - emit(0x24); - emit(0x08); - // lea rdx, [rsi + rdi * 8 + 8] - emit(0x48); - emit(0x8d); - emit(0x54); - emit(0xfe); - emit(0x08); - // push rdx - emit(0x52); - // push rsi - emit(0x56); - // push rdi - emit(0x57); - // push rbp - emit(0x55); - } - // push rbp - emit(0x55); - // mov rbp, rsp - emit(0x48); - emit(0x8b); - emit(0xec); - i = 0; + (my_ctranslate_type)((my_c),((my_arg)->my_val),((unsigned char *)""),(1UL)); + (my_arg)=((my_arg)->my_arg); + if (my_arg) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)", ")); + } else { + break; + } + } + } else { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"void")); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_STRUCT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"struct my_")); + (my_fputs)(((my_c)->my_cout),(((my_ty)->my_st)->my_name)); + if ((unsigned long)((my_name)&&((my_name)[0UL]))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)" my_")); + (my_fputs)(((my_c)->my_cout),(my_name)); + } + } else { + (my_die)(((unsigned char *)"invalid type")); + } +} +void my_ctranslate_vars(struct my_compiler* my_c, struct my_node* my_n) +{ + unsigned long my_kind = 0; + struct my_node* my_child = 0; + if ((unsigned long)(!(my_n))) { + return; + } + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { while (1) { - if (i >= n) { - break; - } - emit_num(0); - i = i + 8; - } -} - -void -emit_store(struct type *t) -{ - // pop rdi - emit(0x5f); - // pop rax - emit(0x58); - if (t->kind == TY_BYTE) { - // mov [rdi], al - emit(0x40); - emit(0x88); - emit(0x07); - } else if (type_isprim(t)) { - // mov [rdi], rax - emit(0x48); - emit(0x89); - emit(0x07); - } else { - die("invalid store"); - } - // push rax - emit(0x50); -} - -void -emit_load(struct type *t) -{ - // pop rdi - emit(0x5f); - if (t->kind == TY_BYTE) { - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // mov al, [rdi] - emit(0x40); - emit(0x8a); - emit(0x07); - } else if (type_isprim(t)) { - // mov rax, [rdi] - emit(0x48); - emit(0x8b); - emit(0x07); - } else { - die("invalid load"); - } - // push rax - emit(0x50); -} - -void -emit_jz(struct label *l) -{ - // pop rax - emit(0x58); - // test rax, rax - emit(0x48); - emit(0x85); - emit(0xc0); - // jz no - emit(0x0f); - emit(0x84); - addfixup(l); -} - -void -emit_lea(struct vdecl *v) -{ - int offset; - offset = v->offset; - if (offset >= -128 && offset <= 127) { - // lea rax, [rbp + v] - emit(0x48); - emit(0x8d); - emit(0x45); - emit(offset); - } else { - // lea rax, [rbp + v] - emit(0x48); - emit(0x8d); - emit(0x85); - emit(offset); - emit(offset >> 8); - emit(offset >> 16); - emit(offset >> 24); - } - // push rax - emit(0x50); -} - -void -emit_and(void) -{ - // pop rax - emit(0x58); - // pop rdx - emit(0x5a); - // and rdx, rax - emit(0x48); - emit(0x23); - emit(0xc2); - // push rax - emit(0x50); -} - -void -emit_or(void) -{ - // pop rax - emit(0x58); - // pop rdx - emit(0x5a); - // or rdx, rax - emit(0x48); - emit(0x0b); - emit(0xc2); - // push rax - emit(0x50); -} - -void -emit_xor(void) -{ - // pop rax - emit(0x58); - // pop rdx - emit(0x5a); - // xor rdx, rax - emit(0x48); - emit(0x33); - emit(0xc2); - // push rax - emit(0x50); -} - -void -emit_add(void) -{ - // pop rax - emit(0x58); - // pop rdx - emit(0x5a); - // add rdx, rax - emit(0x48); - emit(0x03); - emit(0xc2); - // push rax - emit(0x50); -} - -void -emit_ret(void) -{ - // pop rax - emit(0x58); - // mov rsp, rbp - emit(0x48); - emit(0x8b); - emit(0xe5); - // pop rbp - emit(0x5d); - // ret - emit(0xc3); -} - -void -emit_lcall(struct label *l, int n) -{ - // call l - emit(0xe8); - addfixup(l); - // add rsp, 8*(n+1) - emit_pop(n); - // push rax - emit(0x50); -} - -void -emit_call(int n) -{ - // pop rax - emit(0x58); - // call rax - emit(0xff); - emit(0xd0); - // add rsp, 8*(n+1) - emit_pop(n); - // push rax - emit(0x50); -} - -void -emit_gt(void) -{ - // pop rdx - emit(0x5a); - // pop rcx - emit(0x59); - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // cmp rdx, rcx - emit(0x48); - emit(0x3b); - emit(0xd1); - // setg al - emit(0x48); - emit(0x0f); - emit(0x9f); - emit(0xc0); - // mov rax - emit(0x50); -} - -void -emit_lt(void) -{ - // pop rdx - emit(0x5a); - // pop rcx - emit(0x59); - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // cmp rdx, rcx - emit(0x48); - emit(0x3b); - emit(0xd1); - // setl al - emit(0x48); - emit(0x0f); - emit(0x9c); - emit(0xc0); - // mov rax - emit(0x50); -} - -void -emit_ge(void) -{ - // pop rdx - emit(0x5a); - // pop rcx - emit(0x59); - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // cmp rdx, rcx - emit(0x48); - emit(0x3b); - emit(0xd1); - // setge al - emit(0x48); - emit(0x0f); - emit(0x9d); - emit(0xc0); - // mov rax - emit(0x50); -} - -void -emit_le(void) -{ - // pop rdx - emit(0x5a); - // pop rcx - emit(0x59); - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // cmp rdx, rcx - emit(0x48); - emit(0x3b); - emit(0xd1); - // setle al - emit(0x48); - emit(0x0f); - emit(0x9e); - emit(0xc0); - // mov rax - emit(0x50); -} - -void -emit_eq(void) -{ - // pop rdx - emit(0x5a); - // pop rcx - emit(0x59); - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // cmp rdx, rcx - emit(0x48); - emit(0x3b); - emit(0xd1); - // sete al - emit(0x48); - emit(0x0f); - emit(0x94); - emit(0xc0); - // mov rax - emit(0x50); -} - -void -emit_ne(void) -{ - // pop rdx - emit(0x5a); - // pop rcx - emit(0x59); - // xor rax, rax - emit(0x48); - emit(0x33); - emit(0xc0); - // cmp rdx, rcx - emit(0x48); - emit(0x3b); - emit(0xd1); - // setne al - emit(0x48); - emit(0x0f); - emit(0x95); - emit(0xc0); - // mov rax - emit(0x50); -} - -void -emit_sub(void) -{ - // pop rax - emit(0x58); - // pop rdx - emit(0x5a); - // sub rax, rdx - emit(0x48); - emit(0x2b); - emit(0xc2); - // push rax - emit(0x50); -} - -void -emit_mul(void) -{ - // pop rax - emit(0x58); - // pop rcx - emit(0x59); - // mul rcx - emit(0x48); - emit(0xf7); - emit(0xe1); - // push rax - emit(0x50); -} - -void -emit_div(void) -{ - // pop rax - emit(0x58); - // pop rcx - emit(0x59); - // xor rdx, rdx - emit(0x48); - emit(0x33); - emit(0xd2); - // test rax, rax - emit(0x48); - emit(0x85); - emit(0xc0); - // sets dl - emit(0x48); - emit(0x0f); - emit(0x98); - emit(0xc2); - // neg rdx - emit(0x48); - emit(0xf7); - emit(0xda); - // idiv rcx - emit(0x48); - emit(0xf7); - emit(0xf9); - // push rax - emit(0x50); -} - -void -emit_mod(void) -{ - // pop rax - emit(0x58); - // pop rcx - emit(0x59); - // xor rdx, rdx - emit(0x48); - emit(0x33); - emit(0xd2); - // test rax, rax - emit(0x48); - emit(0x85); - emit(0xc0); - // sets dl - emit(0x48); - emit(0x0f); - emit(0x98); - emit(0xc2); - // neg rdx - emit(0x48); - emit(0xf7); - emit(0xda); - // idiv rcx - emit(0x48); - emit(0xf7); - emit(0xf9); - // push rdx - emit(0x52); -} - -void -emit_lsh(void) -{ - // pop rax - emit(0x58); - // pop rcx - emit(0x59); - // shl rax, cl - emit(0x48); - emit(0xd3); - emit(0xe0); - // push rax - emit(0x50); -} - -void -emit_rsh(void) -{ - // pop rax - emit(0x58); - // pop rcx - emit(0x59); - // shr rax, cl - emit(0x48); - emit(0xd3); - emit(0xe8); - // push rax - emit(0x50); -} - -void -emit_not(void) -{ - // pop rax - emit(0x58); - // neg rax - emit(0x48); - emit(0xf7); - emit(0xd0); - // push rax - emit(0x50); -} - -void -emit_neg(void) -{ - // pop rax - emit(0x58); - // neg rax - emit(0x48); - emit(0xf7); - emit(0xd8); - // push rax - emit(0x50); -} - -// Write the output -void -writeout(void) -{ - int i; - int load_addr; - int entry; - struct decl *d; - struct buf *b; - int kentry; - int magic; - int flags; - int checksum; - int addr; - int end; - - d = find((unsigned char *)"_start"); - if (!d->defined || !d->label->fixed) { - die("no _start function"); - } - - load_addr = 0x100000; - entry = load_addr + d->label->at + 128 + 32; - at = at + 128 + 32; - end = load_addr + at; - - magic = 0x1badb002; - flags = 0x00010003; - checksum = -(magic + flags); - addr = load_addr + 120; - - d = find((unsigned char *)"_kstart"); - if (d->defined && d->label->fixed) { - kentry = load_addr + d->label->at +128 + 32; - } else { - magic = 0; - kentry = 0; - } - - // magic - fputc(0x7f, fout); - fputc('E', fout); - fputc('L', fout); - fputc('F', fout); - - // class - fputc(2, fout); - - // endian - fputc(1, fout); - - // version - fputc(1, fout); - - // abi - fputc(0, fout); - - // abi version - fputc(0, fout); - - // padding - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // type - fputc(2, fout); - fputc(0, fout); - - // machine - fputc(62, fout); - fputc(0, fout); - - // version - fputc(1, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // entry point - fputc(entry, fout); - fputc(entry >> 8, fout); - fputc(entry >> 16, fout); - fputc(entry >> 24, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phoff - fputc(64, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // shoff - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // flags - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // ehsize - fputc(64, fout); - fputc(0, fout); - - // phentsize - fputc(56, fout); - fputc(0, fout); - - // phnum - fputc(1, fout); - fputc(0, fout); - - // shentsize - fputc(64, fout); - fputc(0, fout); - - // shnum - fputc(0, fout); - fputc(0, fout); - - // shstrndx - fputc(0, fout); - fputc(0, fout); - - // phdr[0].type - fputc(1, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].flags - fputc(5, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].offset - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].vaddr - fputc(load_addr, fout); - fputc(load_addr >> 8, fout); - fputc(load_addr >> 16, fout); - fputc(load_addr >> 24, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].paddr - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].filesize - fputc(at, fout); - fputc(at >> 8, fout); - fputc(at >> 16, fout); - fputc(at >> 24, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].memsize - fputc(at, fout); - fputc(at >> 8, fout); - fputc(at >> 16, fout); - fputc(at >> 24, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // phdr[0].align - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // mb.magic - fputc(magic, fout); - fputc(magic >> 8, fout); - fputc(magic >> 16, fout); - fputc(magic >> 24, fout); - - // mb.flags - fputc(flags, fout); - fputc(flags >> 8, fout); - fputc(flags >> 16, fout); - fputc(flags >> 24, fout); - - // mb.checksum - fputc(checksum, fout); - fputc(checksum >> 8, fout); - fputc(checksum >> 16, fout); - fputc(checksum >> 24, fout); - - // mb.header - fputc(addr, fout); - fputc(addr >> 8, fout); - fputc(addr >> 16, fout); - fputc(addr >> 24, fout); - - // mb.load - fputc(load_addr, fout); - fputc(load_addr >> 8, fout); - fputc(load_addr >> 16, fout); - fputc(load_addr >> 24, fout); - - // mb.load_end - fputc(end, fout); - fputc(end >> 8, fout); - fputc(end >> 16, fout); - fputc(end >> 24, fout); - - // mb.bss_end - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - fputc(0, fout); - - // mb.entry - fputc(kentry, fout); - fputc(kentry >> 8, fout); - fputc(kentry >> 16, fout); - fputc(kentry >> 24, fout); - - // nop sled - fputc(0x90, fout); - fputc(0x90, fout); - fputc(0x90, fout); - fputc(0x90, fout); - fputc(0x90, fout); - fputc(0x90, fout); - fputc(0x90, fout); - fputc(0x90, fout); - - // text - b = text; + if ((unsigned long)(!(my_n))) { + break; + } + (my_ctranslate_vars)((my_c),(((my_n)->my_a)->my_b)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { while (1) { - if (!b) { - break; - } - i = 0; - while (1) { - if (i >= b->fill) { - break; - } - fputc(b->buf[i], fout); - i = i + 1; - } - b = b->next; - } -} - -/////////////////////////////////////////////////////////////////////////////// -// stdlib // -/////////////////////////////////////////////////////////////////////////////// - -// Define "stdlib" functions -void -add_stdlib(void) -{ - struct label *a; - struct label *b; - struct decl *d; - - d = find((unsigned char *)"syscall"); - if (!d->defined) { - d->defined = 1; - fixup_label(d->label); - // push rbp - emit(0x55); - // mov rbp, rsp - emit(0x48); - emit(0x8b); - emit(0xec); - // mov rax, [rbp + 16] - emit(0x48); - emit(0x8b); - emit(0x45); - emit(0x10); - // mov rdi, [rbp + 24] - emit(0x48); - emit(0x8b); - emit(0x7d); - emit(0x18); - // mov rsi, [rbp + 32] - emit(0x48); - emit(0x8b); - emit(0x75); - emit(0x20); - // mov rdx, [rbp + 40] - emit(0x48); - emit(0x8b); - emit(0x55); - emit(0x28); - // mov r10, [rbp + 48] - emit(0x4c); - emit(0x8b); - emit(0x55); - emit(0x30); - // mov r8, [rbp + 56] - emit(0x4c); - emit(0x8b); - emit(0x45); - emit(0x38); - // mov r9, [rbp + 64] - emit(0x4c); - emit(0x8b); - emit(0x4d); - emit(0x40); - // syscall - emit(0x0f); - emit(0x05); - // push rax - emit(0x50); - // pop rax - emit(0x58); - // mov rsp, rbp - emit(0x48); - emit(0x8b); - emit(0xe5); - // pop rbp - emit(0x5d); - // ret - emit(0xc3); - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Code Generation // -/////////////////////////////////////////////////////////////////////////////// - -// Translate an expression -void -texpr(struct node *n, int rhs) -{ - struct decl *d; - struct vdecl *v; - struct edecl *e; - struct node *a; - struct label *no; - struct label *out; - int nargs; - int kind; - int offset; - - kind = n->kind; - if (kind == N_IDENT) { - e = efind(n->s, 0); - if (e) { - emit_num(e->val); - } else { - v = vfind(curfunc, n->s, 0); - if (v) { - emit_lea(v); - if (rhs) { - emit_load(n->t); - } - } else { - d = find(n->s); - emit_ptr(d->label); - } - } - } else if (kind == N_NUM) { - if (!rhs) { - die("num is not an lexpr"); - } - emit_num(n->n); - } else if (kind == N_CHAR) { - if (!rhs) { - die("char is not an lexpr"); - } - emit_num(n->n); - } else if (kind == N_STR) { - if (!rhs) { - die("str is not an lexpr"); - } - emit_str(n->s); - } else if (kind == N_EXPRLIST) { - if (n->b) { - texpr(n->b, 1); - } - texpr(n->a, 1); - } else if (kind == N_CALL) { - if (!rhs) { - die("call is not an lexpr"); - } - nargs = 0; - a = n->b; - while (1) { - if (!a) { - break; - } - nargs = nargs + 1; - a = a->b; - } - if (n->b) { - texpr(n->b, 1); - } - if (n->a->kind == N_IDENT) { - v = vfind(curfunc, n->a->s, 0); - if (v) { - emit_lea(v); - emit_load(n->a->t); - emit_call(nargs); - } else { - d = find(n->a->s); - emit_lcall(d->label, nargs); - } - } else { - texpr(n->a, 0); - emit_call(nargs); - } - } else if (kind == N_DOT) { - texpr(n->a, 0); - if (n->a->t->kind == TY_PTR) { - emit_load(n->a->t); - } - emit_num(n->offset); - emit_add(); - if (rhs) { - emit_load(n->t); - } - } else if (kind == N_ASSIGN) { - if (!rhs) { - die("assign is not an lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 0); - emit_store(n->t); - } else if (kind == N_SIZEOF) { - if (!rhs) { - die("sizeof is not an lexpr"); - } - out = mklabel(); - emit_jmp(out); - texpr(n->a, 0); - fixup_label(out); - if (n->a->t->kind == TY_BYTE) { - emit_num(1); - } else { - emit_num(type_sizeof(n->a->t)); - } - } else if (kind == N_REF) { - if (!rhs) { - die("ref is not an lexpr"); - } - texpr(n->a, 0); - } else if (kind == N_DEREF) { - texpr(n->a, 1); - if (rhs) { - emit_load(n->t); - } - } else if (kind == N_INDEX) { - texpr(n->a, 1); - texpr(n->b, 1); - emit_num(n->offset); - emit_mul(); - emit_add(); - if (rhs) { - emit_load(n->t); - } - } else if (kind == N_LT) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_lt(); - } else if (kind == N_GT) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_gt(); - } else if (kind == N_LE) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_le(); - } else if (kind == N_GE) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_ge(); - } else if (kind == N_EQ) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_eq(); - } else if (kind == N_NE) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_ne(); - } else if (kind == N_ADD) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_add(); - } else if (kind == N_SUB) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_sub(); - } else if (kind == N_MUL) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_mul(); - } else if (kind == N_DIV) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_div(); - } else if (kind == N_MOD) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_mod(); - } else if (kind == N_LSH) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_lsh(); - } else if (kind == N_RSH) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_rsh(); - } else if (kind == N_BNOT) { - if (!rhs) { - die("not lexpr"); - } - no = mklabel(); - out = mklabel(); - texpr(n->a, 1); - emit_jz(no); - emit_num(0); - emit_jmp(out); - fixup_label(no); - emit_num(1); - fixup_label(out); - } else if (kind == N_BOR) { - if (!rhs) { - die("not lexpr"); - } - no = mklabel(); - out = mklabel(); - texpr(n->a, 1); - emit_jz(no); - emit_num(1); - emit_jmp(out); - fixup_label(no); - no = mklabel(); - texpr(n->b, 1); - emit_jz(no); - emit_num(1); - emit_jmp(out); - fixup_label(no); - emit_num(0); - fixup_label(out); - } else if (kind == N_BAND) { - if (!rhs) { - die("not lexpr"); - } - no = mklabel(); - out = mklabel(); - texpr(n->a, 1); - emit_jz(no); - texpr(n->b, 1); - emit_jz(no); - emit_num(1); - emit_jmp(out); - fixup_label(no); - emit_num(0); - fixup_label(out); - } else if (kind == N_POS) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->a, 1); - } else if (kind == N_NEG) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->a, 1); - emit_neg(); - } else if (kind == N_CAST) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->a, 1); - } else if (kind == N_NOT) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->a, 1); - emit_not(); - } else if (kind == N_AND) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_and(); - } else if (kind == N_OR) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_or(); - } else if (kind == N_XOR) { - if (!rhs) { - die("not lexpr"); - } - texpr(n->b, 1); - texpr(n->a, 1); - emit_xor(); - } else { - die("invalid expr"); - } -} - -// Loop top and loop out -struct label *ltop; -struct label *lout; - -// Translate a statement -void -tstmt(struct node *n) -{ - struct label *out; - struct label *no; - struct label *saved_top; - struct label *saved_out; - int kind; - - if (!n) { - return; - } - - kind = n->kind; - if (kind == N_CONDLIST) { - out = mklabel(); - no = 0; - while (1) { - if (no) { - fixup_label(no); - } - if (!n) { - break; - } - no = mklabel(); - - if (n->a->a) { - texpr(n->a->a, 1); - emit_jz(no); - } - - tstmt(n->a->b); - emit_jmp(out); - n = n->b; - } - fixup_label(out); - } else if (kind == N_STMTLIST) { - while (1) { - if (!n) { - break; - } - tstmt(n->a); - n = n->b; - } - } else if (kind == N_LOOP) { - saved_top = ltop; - saved_out = lout; - ltop = mklabel(); - lout = mklabel(); - fixup_label(ltop); - tstmt(n->a); - emit_jmp(ltop); - fixup_label(lout); - ltop = saved_top; - lout = saved_out; - } else if (kind == N_BREAK) { - if (!ltop) { - die("break outside loop"); - } - emit_jmp(lout); - } else if (kind == N_CONTINUE) { - if (!ltop) { - die("continue outside loop"); - } - emit_jmp(ltop); - } else if (kind == N_RETURN) { - if (n->a) { - texpr(n->a, 1); - } else { - emit_num(0); - } - emit_ret(); - } else if (kind != N_VARDECL) { - texpr(n, 1); - emit_pop(1); - } -} - -// Translate a function -void -tfunc(struct decl *d) -{ - struct node *n; - - if (!d->defined) { - return; - } - - curfunc = d; - - emit_str(d->name); - - fixup_label(d->label); - - emit_preamble(d->preamble, !cmp(d->name, (unsigned char *)"_start")); - - tstmt(d->body); - - emit_num(0); - - if (!cmp(d->name, (unsigned char *)"_start")) { - emit(0x0f); - emit(0x0b); - } - - emit_ret(); -} - -// Translate all functions -void -translate(struct node *p) -{ - struct decl *d; - - d = firstdecl(); + if ((unsigned long)(!(my_n))) { + break; + } + (my_ctranslate_vars)((my_c),((my_n)->my_a)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + (my_ctranslate_vars)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_VARDECL)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011")); + (my_ctranslate_type)((my_c),((my_n)->my_t),(((my_n)->my_a)->my_s),(1UL)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)" = ")); + (my_ctranslate_zero)((my_c),((my_n)->my_t)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } +} +void my_ctranslate_zero(struct my_compiler* my_c, struct my_type* my_ty) +{ + struct my_node* my_n = 0; + struct my_decl* my_v = 0; + struct my_type* my_arg = 0; + if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_VOID)))) { + (my_die)(((unsigned char *)"invalid zero void")); + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_INT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"0")); + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_BYTE)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"0")); + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_PTR)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"0")); + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_FUNC)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"0")); + } else if ((unsigned long)(((long)((my_ty)->my_kind))==((long)(my_TY_STRUCT)))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"{")); + (my_n)=((((my_ty)->my_st)->my_struct_def)->my_b); while (1) { - if (!d) { - break; - } - tfunc(d); - d = nextdecl(d); - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Main // -/////////////////////////////////////////////////////////////////////////////// - -int -main(int argc, char **argv) -{ - struct node *p; - int i; - - // Setup the compiler - setup(); - - p = 0; - i = 1; + if ((unsigned long)(!(my_n))) { + break; + } + (my_v)=((my_find)((my_c),(((my_ty)->my_st)->my_name),((((my_n)->my_a)->my_a)->my_s),(0UL))); + (my_ctranslate_zero)((my_c),((my_v)->my_member_type)); + (my_n)=((my_n)->my_b); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"}")); + } else { + (my_die)(((unsigned char *)"invalid type")); + } +} +unsigned long my_dec2int(unsigned char * my_s, unsigned long my_len, unsigned long * my_ok) +{ + unsigned long my_x = 0; + unsigned long my_d = 0; + unsigned long my_i = 0; + (my_x)=(0UL); + (my_i)=(0UL); while (1) { - if (i >= argc) { - break; - } - - if (!cmp((unsigned char *)argv[i], (unsigned char *)"-o")) { - i = i + 1; - if (i >= argc) { - die("invalid -o at end of argument list"); - } - - open_output((unsigned char *)argv[i]); - - i = i + 1; - continue; - } - - open_source((unsigned char *)argv[i]); - - // Parse the program - p = program(p); - - close_source(); - - i = i + 1; - } - - // Verify types - typecheck(p); - - // Generate code - translate(p); - - if (fout == stdout) { - open_output((unsigned char *)"a.out"); - } - - // Define _start, syscall - add_stdlib(); - - // Write output - writeout(); - - return 0; + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; + } + (my_d)=((unsigned long )(my_s)[my_i]); + if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(48))))&&((unsigned long)(((long)(my_d))<=((long)(57)))))) { + (my_d)=((unsigned long )(((unsigned long)(my_d))-((unsigned long)(48)))); + } else { + (*(my_ok))=(0UL); + return 0UL; + } + (my_x)=((unsigned long )(((long)(my_x))*((long)(10UL)))); + (my_x)=((unsigned long )(((unsigned long)(my_x))+((unsigned long)(my_d)))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_x))>((long)(2147483647UL)))) { + (*(my_ok))=(0UL); + return 0UL; + } + } + (*(my_ok))=(1UL); + return my_x; +} +void my_defenum(struct my_compiler* my_c, struct my_node* my_n) +{ + struct my_decl* my_d = 0; + unsigned long my_i = 0; + unsigned char * my_name = 0; + (my_n)=((my_n)->my_b); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(!(my_n))) { + break; + } + (my_name)=((((my_n)->my_a)->my_a)->my_s); + (my_d)=((my_find)((my_c),(my_name),((unsigned char *)0UL),(1UL))); + if ((my_d)->my_enum_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate enum")); + } + if (((my_n)->my_a)->my_b) { + (my_i)=((((my_n)->my_a)->my_b)->my_n); + } + ((my_d)->my_enum_defined)=(1UL); + ((my_d)->my_enum_value)=(my_i); + ((my_d)->my_enum_def)=(my_n); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_n)=((my_n)->my_b); + } +} +struct my_decl*my_defextern(struct my_compiler* my_c, struct my_node* my_n) +{ + struct my_decl* my_d = 0; + unsigned char * my_name = 0; + struct my_type* my_t = 0; + (my_name)=(((my_n)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),((my_n)->my_b))); + (my_d)=((my_find)((my_c),(my_name),((unsigned char *)0UL),(1UL))); + if ((my_d)->my_func_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate function")); + } + ((my_d)->my_func_defined)=(1UL); + ((my_d)->my_func_type)=(my_t); + return my_d; +} +void my_defstruct(struct my_compiler* my_c, struct my_node* my_n) +{ + unsigned char * my_name = 0; + struct my_decl* my_d = 0; + (my_name)=(((my_n)->my_a)->my_s); + if ((unsigned long)(((unsigned long)(!((my_strcmp)((my_name),((unsigned char *)"int")))))||((unsigned long)(((unsigned long)(!((my_strcmp)((my_name),((unsigned char *)"byte")))))||((unsigned long)(!((my_strcmp)((my_name),((unsigned char *)"func"))))))))) { + (my_cdie)((my_c),((unsigned char *)"reserved word")); + } + (my_d)=((my_find)((my_c),(my_name),((unsigned char *)0UL),(1UL))); + if ((my_d)->my_struct_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate struct")); + } + ((my_d)->my_struct_defined)=(1UL); + ((my_d)->my_struct_def)=(my_n); +} +void my_defun(struct my_compiler* my_c, struct my_node* my_n) +{ + struct my_decl* my_d = 0; + (my_d)=((my_defextern)((my_c),((my_n)->my_a))); + ((my_d)->my_func_def)=(my_n); +} +void my_die(unsigned char * my_msg) +{ + (my_fdputs)((2UL),(my_msg)); + (my_fdputs)((2UL),((unsigned char *)"\012")); + (my_exit)((1UL)); +} +unsigned long my_dup2(unsigned long my_old, unsigned long my_new) +{ + return (my_syscall)((33UL),(my_old),(my_new),(0UL),(0UL),(0UL),(0UL)); +} +void my_emit(struct my_assembler* my_c, unsigned long my_x) +{ + (my_reserve)((my_c),(1UL)); + ((((my_c)->my_text_end)->my_buf)[((my_c)->my_text_end)->my_fill])=((unsigned char )my_x); + (((my_c)->my_text_end)->my_fill)=((unsigned long )(((unsigned long)(((my_c)->my_text_end)->my_fill))+((unsigned long)(1UL)))); + ((my_c)->my_at)=((unsigned long )(((unsigned long)((my_c)->my_at))+((unsigned long)(1UL)))); +} +void my_emit_add(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_ADDRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_and(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_ANDRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_blob(struct my_assembler* my_c, unsigned char * my_s, unsigned long my_n) +{ + struct my_label* my_a = 0; + struct my_label* my_b = 0; + unsigned long my_i = 0; + (my_a)=((my_mklabel)((my_c))); + (my_b)=((my_mklabel)((my_c))); + (my_as_jmp)((my_c),(my_OP_JMP),(my_b)); + (my_fixup_label)((my_c),(my_a)); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_n)))) { + break; + } + (my_as_emit)((my_c),((unsigned long )(my_s)[my_i])); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_as_emit)((my_c),(0UL)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_fixup_label)((my_c),(my_b)); + (my_emit_ptr)((my_c),(my_a)); +} +void my_emit_builtin(struct my_compiler* my_c) +{ + struct my_decl* my_d = 0; + (my_d)=((my_find)((my_c),((unsigned char *)"syscall"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_emit_syscall)(((my_c)->my_as)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_restorer"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_restorer)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_include"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_UD2)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"ud2"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_UD2)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"cpuid"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_CPUID)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"inb"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_as),(my_OP_IN)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"outb"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_op)(((my_c)->my_as),(my_OP_OUT)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"inw"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_emit)(((my_c)->my_as),(my_OP_OS)); + (my_as_op)(((my_c)->my_as),(my_OP_IND)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"outw"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_emit)(((my_c)->my_as),(my_OP_OS)); + (my_as_op)(((my_c)->my_as),(my_OP_OUTD)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"ind"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_as),(my_OP_IND)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"outd"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_op)(((my_c)->my_as),(my_OP_OUTD)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdmsr"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_as),(my_OP_RDMSR)); + (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RCX),(32UL)); + (my_as_modr)(((my_c)->my_as),(my_OP_SHLM),(my_R_RDX)); + (my_as_modrr)(((my_c)->my_as),(my_OP_ORRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrmsr"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RDX),(my_R_RAX)); + (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RCX),(32UL)); + (my_as_modr)(((my_c)->my_as),(my_OP_SHRM),(my_R_RDX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_as),(my_OP_WRMSR)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdcr0"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR0),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrcr0"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR0),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdcr2"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR2),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrcr2"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR2),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdcr3"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR3),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrcr3"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR3),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdcr4"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR4),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrcr4"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR4),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"lgdt"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RAX),(1UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(2UL)); + (my_as_modm)(((my_c)->my_as),(my_OP_LGDTM),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),(16UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"lidt"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RAX),(1UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(2UL)); + (my_as_modm)(((my_c)->my_as),(my_OP_LIDTM),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),(16UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"lldt"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modr)(((my_c)->my_as),(my_OP_LLDTM),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"ltr"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modr)(((my_c)->my_as),(my_OP_LTRM),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"lseg"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_ES),(my_R_RAX)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_DS),(my_R_RAX)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_FS),(my_R_RAX)); + (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_GS),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_op)(((my_c)->my_as),(my_OP_CALL)); + (my_as_emit)(((my_c)->my_as),(5UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_JMP)); + (my_as_emit)(((my_c)->my_as),(2UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"hlt"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_HLT)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"cli"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_CLI)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"sti"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_STI)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdflags"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrflags"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_op)(((my_c)->my_as),(my_OP_POPF)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wbinvld"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modm)(((my_c)->my_as),(my_OP_WBINVD),(my_R_RAX),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"invlpg"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modm)(((my_c)->my_as),(my_OP_INVLPGM),(my_R_RAX),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_ssr0"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_ssr)((my_c)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_isr0"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_isr)((my_c)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_rgs"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSI),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_r32"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); + (((my_c)->my_as)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSI),(0UL),(0UL),(0UL)); + (((my_c)->my_as)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_w32"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (((my_c)->my_as)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (((my_c)->my_as)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_r16"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (((my_c)->my_as)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD16),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (((my_c)->my_as)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_w16"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (((my_c)->my_as)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE16),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (((my_c)->my_as)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_rdrand"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); + (my_as_modr)(((my_c)->my_as),(my_OP_RDRAND),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_as)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"taskswitch"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LEA),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_RDSR),(my_R_CS),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_RDSR),(my_R_SS),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); + } +} +void my_emit_call(struct my_assembler* my_c, unsigned long my_n) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_ICALLM),(my_R_RAX)); + (my_emit_pop)((my_c),(my_n)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_div(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RDX),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_S)))),(0UL),(my_R_RDX)); + (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RDX)); + (my_as_modr)((my_c),(my_OP_IDIVM),(my_R_RCX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_eq(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_E)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_ge(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_GE)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_gt(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_G)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_isr(struct my_compiler* my_c) +{ + struct my_decl* my_d = 0; + struct my_label* my_out = 0; + unsigned long my_i = 0; + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { + break; + } + (my_reserve)(((my_c)->my_as),(16UL)); + if ((unsigned long)(((unsigned long)(((long)(my_i))==((long)(8UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(10UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(11UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(12UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(13UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(14UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(17UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(21UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(29UL))))||((unsigned long)(((long)(my_i))==((long)(30UL)))))))))))))))))))))) { + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + } else { + (my_as_emit)(((my_c)->my_as),(106UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + } + (my_as_emit)(((my_c)->my_as),(104UL)); + (my_as_emit)(((my_c)->my_as),(my_i)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(233UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_addfixup)(((my_c)->my_as),(my_out)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(176UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(0UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(160UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(8UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(168UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(16UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(24UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(32UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(40UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(48UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_d)=((my_find)((my_c),((unsigned char *)"_isr"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { + (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); + } + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(16UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(24UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(32UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(40UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long )(((unsigned long)(176UL))+((unsigned long)(48UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long )(((unsigned long)(176UL))+((unsigned long)((unsigned long )(((long)(3UL))*((long)(8UL)))))))); + (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); +} +void my_emit_jmp(struct my_assembler* my_c, struct my_label* my_l) +{ + (my_as_jmp)((my_c),(my_OP_JMP),(my_l)); +} +void my_emit_jz(struct my_assembler* my_c, struct my_label* my_l) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); + (my_as_jmp)((my_c),((unsigned long )(((unsigned long)(my_OP_JCC))+((unsigned long)(my_CC_E)))),(my_l)); +} +void my_emit_kstart(struct my_assembler* my_c) +{ + struct my_label* my_hang = 0; + struct my_label* my_do_iret = 0; + struct my_label* my_do_ret = 0; + struct my_label* my_done = 0; + ((my_c)->my_bits32)=(1UL); + (my_hang)=((my_mklabel)((my_c))); + (my_do_iret)=((my_mklabel)((my_c))); + (my_do_ret)=((my_mklabel)((my_c))); + (my_done)=((my_mklabel)((my_c))); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(732803074UL)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RAX),(my_R_RDX)); + (my_as_jmp)((my_c),((unsigned long )(((unsigned long)(my_OP_JCC))+((unsigned long)(my_CC_NE)))),(my_hang)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RSP),(3145728UL)); + (my_as_modri)((my_c),(my_OP_ANDI),(my_R_RSP),((unsigned long )(-(unsigned long)(4096UL)))); + (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(4096UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(131UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(4UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),((unsigned long )(((unsigned long)((unsigned long )(((long)(510UL))*((long)(8UL)))))+((unsigned long)(0UL))))); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),((unsigned long )(((unsigned long)((unsigned long )(((long)(510UL))*((long)(8UL)))))+((unsigned long)(4UL))))); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(4096UL)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),(3UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(4UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),((unsigned long )(((unsigned long)((unsigned long )(((long)(511UL))*((long)(8UL)))))+((unsigned long)(0UL))))); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),((unsigned long )(((unsigned long)((unsigned long )(((long)(511UL))*((long)(8UL)))))+((unsigned long)(4UL))))); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR3),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(64UL)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(12UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(2136064UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(20UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(37376UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(28UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(23UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(2UL)); + (my_as_modm)((my_c),(my_OP_LGDTM),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modr)((my_c),(my_OP_LLDTM),(my_R_RAX)); + (my_as_modm)((my_c),(my_OP_LIDTM),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(160UL)); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR4),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RCX),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(1UL))))<<((unsigned long)(32UL)))))+((unsigned long)((unsigned long )(((unsigned long)(192UL))<<((unsigned long)(24UL))))))))+((unsigned long)(128UL))))); + (my_as_op)((my_c),(my_OP_RDMSR)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),(256UL)); + (my_as_op)((my_c),(my_OP_WRMSR)); + (my_as_modrr)((my_c),(my_OP_RDCRR),(my_R_CR0),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(32768UL))))<<((unsigned long)(16UL)))))|((unsigned long)(1UL))))); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR0),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(8UL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_jmp)((my_c),(my_OP_CALL),(my_do_iret)); + ((my_c)->my_bits32)=(0UL); + (my_as_jmp)((my_c),(my_OP_CALL),(my_do_ret)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RBP),((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(23UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(2UL)); + (my_as_modm)((my_c),(my_OP_LGDTM),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(16UL)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_ES),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_DS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_FS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_GS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_SS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RSP),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RSP),((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(4096UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modri)((my_c),(my_OP_ANDI),(my_R_RDI),(2147483647UL)); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR3),(my_R_RDI)); + (my_as_jmp)((my_c),(my_OP_JMP),(my_done)); + (my_fixup_label)((my_c),(my_hang)); + (my_as_op)((my_c),(my_OP_CLI)); + (my_as_op)((my_c),(my_OP_HLT)); + (my_as_jmp)((my_c),(my_OP_JMP),(my_hang)); + (my_fixup_label)((my_c),(my_do_iret)); + (my_as_op)((my_c),(my_OP_IRET)); + (my_fixup_label)((my_c),(my_do_ret)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_op)((my_c),(my_OP_RET)); + (my_fixup_label)((my_c),(my_done)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); +} +void my_emit_lcall(struct my_assembler* my_c, struct my_label* my_l, unsigned long my_n) +{ + (my_as_jmp)((my_c),(my_OP_CALL),(my_l)); + (my_emit_pop)((my_c),(my_n)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_le(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_LE)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_lea(struct my_assembler* my_c, unsigned long my_offset) +{ + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(my_offset)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_load(struct my_assembler* my_c, struct my_type* my_t) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); + if ((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrm)((my_c),(my_OP_LOADB),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else if ((my_type_isprim)((my_t))) { + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else { + (my_die)(((unsigned char *)"invalid load")); + } + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_lsh(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modr)((my_c),(my_OP_SHLM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_lt(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_L)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_mod(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RDX),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_S)))),(0UL),(my_R_RDX)); + (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RDX)); + (my_as_modr)((my_c),(my_OP_IDIVM),(my_R_RCX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); +} +void my_emit_mul(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modr)((my_c),(my_OP_IMULM),(my_R_RCX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_ne(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long )(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_NE)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_neg(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_not(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_NOTM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_num(struct my_assembler* my_c, unsigned long my_x) +{ + (my_as_opri64)((my_c),(my_OP_MOVABS),(my_R_RDX),(my_x)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); +} +void my_emit_or(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_ORRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_pop(struct my_assembler* my_c, unsigned long my_n) +{ + (my_as_modri)((my_c),(my_OP_ADDI),(my_R_RSP),((unsigned long )(((unsigned long)(my_n))<<((unsigned long)(3UL))))); +} +void my_emit_preamble(struct my_assembler* my_c, unsigned long my_n, unsigned long my_pragma) +{ + unsigned long my_i = 0; + if ((unsigned long)(((long)(my_pragma))==((long)(1UL)))) { + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDX),(my_R_RSI),(my_R_RDI),(8UL),(8UL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RSI)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDI)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); + } else if ((unsigned long)(((long)(my_pragma))>((long)(1UL)))) { + (my_emit_kstart)((my_c)); + } + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { + break; + } + (my_emit_num)((my_c),(0UL)); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(8UL)))); + } +} +void my_emit_ptr(struct my_assembler* my_c, struct my_label* my_l) +{ + (my_reserve)((my_c),(16UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RIP),(0UL),(0UL),(128UL)); + (my_addfixup)((my_c),(my_l)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_restorer(struct my_assembler* my_c) +{ + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(15UL)); + (my_as_op)((my_c),(my_OP_SYSCALL)); +} +void my_emit_ret(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RSP),(my_R_RBP)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RBP)); + (my_as_op)((my_c),(my_OP_RET)); +} +void my_emit_rsh(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modr)((my_c),(my_OP_SHRM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_ssr(struct my_compiler* my_c) +{ + struct my_decl* my_d = 0; + struct my_decl* my_v = 0; + (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no _save")); + } + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modra)(((my_c)->my_as),(my_OP_STORE),(my_R_RSP),((my_v)->my_member_offset)); + (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"curtask"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no global.curtask")); + } + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),((my_v)->my_member_offset)); + (my_v)=((my_find)((my_c),((unsigned char *)"task"),((unsigned char *)"stack"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no task.stack")); + } + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),((my_v)->my_member_offset)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long )(((unsigned long)(4096UL))-((unsigned long)(176UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(160UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(168UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(43UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(144UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(35UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(152UL)); + (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no _save")); + } + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),((my_v)->my_member_offset)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); + (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_d)=((my_find)((my_c),((unsigned char *)"_ssr"),((unsigned char *)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { + (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); + } + (my_as_op)(((my_c)->my_as),(my_OP_CLI)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long )(((long)(3UL))*((long)(8UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_rex)(((my_c)->my_as),(my_OP_SYSRET),(0UL),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_SYSRET)); +} +void my_emit_store(struct my_assembler* my_c, struct my_type* my_t) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + if ((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_as_modrm)((my_c),(my_OP_STOREB),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else if ((my_type_isprim)((my_t))) { + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else { + (my_die)(((unsigned char *)"invalid store")); + } + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_str(struct my_assembler* my_c, unsigned char * my_s) +{ + struct my_label* my_a = 0; + struct my_label* my_b = 0; + unsigned long my_i = 0; + (my_a)=((my_mklabel)((my_c))); + (my_b)=((my_mklabel)((my_c))); + (my_as_jmp)((my_c),(my_OP_JMP),(my_b)); + (my_fixup_label)((my_c),(my_a)); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(!((my_s)[my_i]))) { + break; + } + (my_as_emit)((my_c),((unsigned long )(my_s)[my_i])); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_as_emit)((my_c),(0UL)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_fixup_label)((my_c),(my_b)); + (my_emit_ptr)((my_c),(my_a)); +} +void my_emit_sub(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_SUBRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_syscall(struct my_assembler* my_c) +{ + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_op)((my_c),(my_OP_SYSCALL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_emit_ud(struct my_assembler* my_c) +{ + (my_as_op)((my_c),(my_OP_UD2)); +} +void my_emit_xor(struct my_assembler* my_c) +{ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void my_enter(struct my_peg* my_c, unsigned long my_tag) +{ + (my_choice)((my_c)); + ((my_c)->my_tag)=(my_tag); +} +unsigned long my_exec(unsigned char * my_cmd, unsigned char ** my_argv, unsigned char ** my_envp) +{ + return (my_syscall)((59UL),((unsigned long )my_cmd),((unsigned long )my_argv),((unsigned long )my_envp),(0UL),(0UL),(0UL)); +} +void my_exit(unsigned long my_n) +{ + (my_syscall)((60UL),(my_n),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +void my_fail(struct my_peg* my_c) +{ + if ((unsigned long)(((long)((my_c)->my_sp))==((long)(0UL)))) { + (my_die)(((unsigned char *)"fail underflow")); + } + if ((unsigned long)(((long)((my_c)->my_depth))>((long)((my_c)->my_fail_depth)))) { + ((my_c)->my_fail_depth)=((my_c)->my_depth); + ((my_c)->my_fail_tag)=((my_c)->my_tag); + ((my_c)->my_fail_line)=((my_c)->my_line); + ((my_c)->my_fail_col)=((my_c)->my_col); + ((my_c)->my_fail_literal)=((unsigned char *)0UL); + } + ((my_c)->my_sp)=((unsigned long )(((unsigned long)((my_c)->my_sp))-((unsigned long)(1UL)))); + ((my_c)->my_pos)=((((my_c)->my_stack)[(my_c)->my_sp]).my_pos); + ((my_c)->my_depth)=((((my_c)->my_stack)[(my_c)->my_sp]).my_depth); + ((my_c)->my_op)=((((my_c)->my_stack)[(my_c)->my_sp]).my_op); + ((my_c)->my_tag)=((((my_c)->my_stack)[(my_c)->my_sp]).my_tag); + ((my_c)->my_line)=((((my_c)->my_stack)[(my_c)->my_sp]).my_line); + ((my_c)->my_col)=((((my_c)->my_stack)[(my_c)->my_sp]).my_col); +} +void my_fclose(struct my_file* my_f) +{ + (my_fflush)((my_f)); + if ((unsigned long)(((long)((my_close)(((my_f)->my_fd))))!=((long)(0UL)))) { + (my_die)(((unsigned char *)"write failed")); + } + (my_free)(((my_f)->my_a),((my_f)->my_buf)); + (my_free)(((my_f)->my_a),((unsigned char *)my_f)); +} +unsigned long my_fdgetc(unsigned long my_fd) +{ + unsigned char my_b = 0; + unsigned long my_ret = 0; + (my_ret)=((my_read)((my_fd),(&(my_b)),(1UL))); + if ((unsigned long)(((long)(my_ret))==((long)(1UL)))) { + return (unsigned long )my_b; + } else if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { + return (unsigned long )(-(unsigned long)(1UL)); + } else { + (my_exit)((3UL)); + } +} +void my_fdputc(unsigned long my_fd, unsigned long my_ch) +{ + unsigned char my_b = 0; + unsigned long my_ret = 0; + (my_b)=((unsigned char )my_ch); + (my_ret)=((my_write)((my_fd),(&(my_b)),(1UL))); + if ((unsigned long)(((long)(my_ret))!=((long)(1UL)))) { + (my_exit)((3UL)); + } +} +void my_fdputd(unsigned long my_fd, unsigned long my_n) +{ + unsigned long my_a = 0; + if ((unsigned long)(((long)(my_n))<((long)(0UL)))) { + (my_fdputc)((my_fd),(45)); + (my_a)=((unsigned long )(-(unsigned long)((unsigned long )(((long)(my_n))%((long)(10UL)))))); + (my_n)=((unsigned long )(((long)(my_n))/((long)((unsigned long )(-(unsigned long)(10UL)))))); + } else { + (my_a)=((unsigned long )(((long)(my_n))%((long)(10UL)))); + (my_n)=((unsigned long )(((long)(my_n))/((long)(10UL)))); + } + if ((unsigned long)(((long)(my_n))!=((long)(0UL)))) { + (my_fdputd)((my_fd),(my_n)); + } + (my_fdputc)((my_fd),((unsigned long )(((unsigned long)(48))+((unsigned long)(my_a))))); +} +void my_fdputh(unsigned long my_fd, unsigned long my_n) +{ + unsigned long my_c = 0; + unsigned long my_r = 0; + (my_r)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_n))==((long)(0UL)))) { + break; + } + (my_r)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_r))<<((unsigned long)(4UL)))))+((unsigned long)((unsigned long )(((unsigned long)(my_n))&((unsigned long)(15UL))))))); + (my_n)=((unsigned long )(((unsigned long)(my_n))>>((unsigned long)(4UL)))); + } + (my_n)=(my_r); + while (1) { + (my_c)=((unsigned long )(((unsigned long)(my_n))&((unsigned long)(15UL)))); + (my_n)=((unsigned long )(((unsigned long)(my_n))>>((unsigned long)(4UL)))); + if ((unsigned long)(((long)(my_c))<((long)(10UL)))) { + (my_fdputc)((my_fd),((unsigned long )(((unsigned long)(my_c))+((unsigned long)(48))))); + } else { + (my_fdputc)((my_fd),((unsigned long )(((unsigned long)(my_c))+((unsigned long)((unsigned long )(((unsigned long)(97))-((unsigned long)(10UL)))))))); + } + if ((unsigned long)(((long)(my_n))==((long)(0UL)))) { + break; + } + } +} +void my_fdputh16(unsigned long my_fd, unsigned long my_x) +{ + (my_fdputhn)((my_fd),(my_x),(16UL)); +} +void my_fdputh32(unsigned long my_fd, unsigned long my_x) +{ + (my_fdputhn)((my_fd),(my_x),(32UL)); +} +void my_fdputh64(unsigned long my_fd, unsigned long my_x) +{ + (my_fdputhn)((my_fd),(my_x),(64UL)); +} +void my_fdputh8(unsigned long my_fd, unsigned long my_x) +{ + (my_fdputhn)((my_fd),(my_x),(8UL)); +} +void my_fdputhn(unsigned long my_fd, unsigned long my_x, unsigned long my_d) +{ + while (1) { + if ((unsigned long)(((long)(my_d))==((long)(0UL)))) { + break; + } + (my_d)=((unsigned long )(((unsigned long)(my_d))-((unsigned long)(4UL)))); + (my_fdputc)((my_fd),((unsigned long )((unsigned char *)"0123456789abcdef")[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_x))>>((unsigned long)(my_d)))))&((unsigned long)(15UL)))])); + } +} +void my_fdputs(unsigned long my_fd, unsigned char * my_msg) +{ + unsigned long my_len = 0; + unsigned long my_ret = 0; + unsigned long my_off = 0; + (my_len)=((my_strlen)((my_msg))); + (my_off)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_off))==((long)(my_len)))) { + break; + } + (my_ret)=((my_write)((my_fd),(my_msg),((unsigned long )(((unsigned long)(my_len))-((unsigned long)(my_off)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_exit)((3UL)); + } + (my_off)=((unsigned long )(((unsigned long)(my_off))+((unsigned long)(my_ret)))); + } +} +void my_fdxxd(unsigned long my_fd, unsigned char * my_data, unsigned long my_len) +{ + unsigned long my_i = 0; + unsigned long my_j = 0; + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_len)))) { + break; + } + (my_fdputh32)((my_fd),(my_i)); + (my_fdputc)((my_fd),(58)); + (my_fdputc)((my_fd),(32)); + (my_j)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_j))==((long)(16UL)))) { + break; + } + if ((unsigned long)(((long)((unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))))<((long)(my_len)))) { + (my_fdputh8)((my_fd),((unsigned long )(my_data)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))])); + } else { + (my_fdputc)((my_fd),(32)); + (my_fdputc)((my_fd),(32)); + } + if ((unsigned long)(((long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))))+((unsigned long)(1UL)))))<((long)(my_len)))) { + (my_fdputh8)((my_fd),((unsigned long )(my_data)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))))+((unsigned long)(1UL)))])); + } else { + (my_fdputc)((my_fd),(32)); + (my_fdputc)((my_fd),(32)); + } + (my_fdputc)((my_fd),(32)); + (my_j)=((unsigned long )(((unsigned long)(my_j))+((unsigned long)(2UL)))); + } + (my_fdputc)((my_fd),(32)); + (my_j)=(0UL); + while (1) { + if ((unsigned long)(((unsigned long)(((long)(my_j))==((long)(16UL))))||((unsigned long)(((long)((unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))))>=((long)(my_len)))))) { + break; + } + if ((unsigned long)(((unsigned long)(((long)((unsigned long )(my_data)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))]))>=((long)(32UL))))&&((unsigned long)(((long)((unsigned long )(my_data)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))]))<((long)(128UL)))))) { + (my_fdputc)((my_fd),((unsigned long )(my_data)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(my_j)))])); + } else { + (my_fdputc)((my_fd),(46)); + } + (my_j)=((unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))); + } + (my_fdputc)((my_fd),(10)); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(16UL)))); + } +} +void my_ffill(struct my_file* my_f) +{ + unsigned long my_ret = 0; + if ((my_f)->my_eof) { + return; + } + if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + } + if ((unsigned long)(((long)((my_f)->my_w))==((long)((my_f)->my_cap)))) { + (my_die)(((unsigned char *)"out of space")); + } + (my_ret)=((my_read)(((my_f)->my_fd),(&(((my_f)->my_buf)[(my_f)->my_w])),((unsigned long )(((unsigned long)((my_f)->my_cap))-((unsigned long)((my_f)->my_w)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_die)(((unsigned char *)"read failed")); + } + if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { + ((my_f)->my_eof)=(1UL); + } + ((my_f)->my_w)=((unsigned long )(((unsigned long)((my_f)->my_w))+((unsigned long)(my_ret)))); +} +void my_fflush(struct my_file* my_f) +{ + unsigned long my_ret = 0; + while (1) { + if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + return; + } + (my_ret)=((my_write)(((my_f)->my_fd),(&(((my_f)->my_buf)[(my_f)->my_r])),((unsigned long )(((unsigned long)((my_f)->my_w))-((unsigned long)((my_f)->my_r)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_die)(((unsigned char *)"write failed")); + } + ((my_f)->my_r)=((unsigned long )(((unsigned long)((my_f)->my_r))+((unsigned long)(my_ret)))); + } +} +unsigned long my_fgetc(struct my_file* my_f) +{ + unsigned long my_ch = 0; + if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { + (my_ffill)((my_f)); + } + if ((my_f)->my_eof) { + return (unsigned long )(-(unsigned long)(1UL)); + } + (my_ch)=((unsigned long )((my_f)->my_buf)[(my_f)->my_r]); + ((my_f)->my_r)=((unsigned long )(((unsigned long)((my_f)->my_r))+((unsigned long)(1UL)))); + return my_ch; +} +unsigned long my_fgets(struct my_file* my_f, unsigned char * my_buf, unsigned long my_len) +{ + unsigned long my_i = 0; + unsigned long my_c = 0; + if ((unsigned long)(((long)(my_len))==((long)(1UL)))) { + ((my_buf)[0UL])=((unsigned char )0UL); + return 0UL; + } + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))))==((long)(my_len)))) { + ((my_buf)[my_i])=((unsigned char )0UL); + return my_i; + } + (my_c)=((my_fgetc)((my_f))); + if ((unsigned long)(((unsigned long)(((long)(my_c))==((long)((unsigned long )(-(unsigned long)(1UL))))))||((unsigned long)(((long)(my_c))==((long)(10)))))) { + ((my_buf)[my_i])=((unsigned char )0UL); + return my_i; + } + ((my_buf)[my_i])=((unsigned char )my_c); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +void my_fillpos(struct my_parser* my_c, struct my_node* my_n) +{ +} +struct my_decl*my_find(struct my_compiler* my_c, unsigned char * my_name, unsigned char * my_member_name, unsigned long my_make) +{ + struct my_decl* my_p = 0; + struct my_decl* my_d = 0; + struct my_decl** my_link = 0; + unsigned long my_dir = 0; + (my_p)=((struct my_decl*)0UL); + (my_link)=(&((my_c)->my_decls)); + while (1) { + (my_d)=(*(my_link)); + if ((unsigned long)(!(my_d))) { + break; + } + (my_dir)=((my_strcmp)((my_name),((my_d)->my_name))); + if ((unsigned long)(((long)(my_dir))==((long)(0UL)))) { + if ((unsigned long)(((unsigned long)(!(my_member_name)))&&((unsigned long)(!((my_d)->my_member_name))))) { + (my_dir)=(0UL); + } else if ((unsigned long)(!(my_member_name))) { + (my_dir)=((unsigned long )(-(unsigned long)(1UL))); + } else if ((unsigned long)(!((my_d)->my_member_name))) { + (my_dir)=(1UL); + } else { + (my_dir)=((my_strcmp)((my_member_name),((my_d)->my_member_name))); + } + } + if ((unsigned long)(((long)(my_dir))<((long)(0UL)))) { + (my_p)=(my_d); + (my_link)=(&((my_d)->my_l)); + } else if ((unsigned long)(((long)(my_dir))>((long)(0UL)))) { + (my_p)=(my_d); + (my_link)=(&((my_d)->my_r)); + } else { + return my_d; + } + } + if ((unsigned long)(!(my_make))) { + return (struct my_decl*)0UL; + } + (my_d)=((struct my_decl*)(my_alloc)(((my_c)->my_a),(208UL))); + ((my_d)->my_name)=(my_name); + ((my_d)->my_member_name)=(my_member_name); + ((my_d)->my_p)=(my_p); + ((my_d)->my_l)=((struct my_decl*)0UL); + ((my_d)->my_r)=((struct my_decl*)0UL); + ((my_d)->my_func_defined)=(0UL); + ((my_d)->my_func_type)=((struct my_type*)0UL); + ((my_d)->my_func_label)=((my_mklabel)(((my_c)->my_as))); + ((my_d)->my_func_def)=((struct my_node*)0UL); + ((my_d)->my_struct_defined)=(0UL); + ((my_d)->my_struct_size)=(0UL); + ((my_d)->my_struct_layout_done)=(0UL); + ((my_d)->my_struct_def)=((struct my_node*)0UL); + ((my_d)->my_member_defined)=(0UL); + ((my_d)->my_member_type)=((struct my_type*)0UL); + ((my_d)->my_member_offset)=(0UL); + ((my_d)->my_member_def)=((struct my_node*)0UL); + ((my_d)->my_enum_defined)=(0UL); + ((my_d)->my_enum_value)=(0UL); + ((my_d)->my_enum_def)=((struct my_node*)0UL); + ((my_d)->my_var_defined)=(0UL); + ((my_d)->my_var_type)=((struct my_type*)0UL); + ((my_d)->my_var_offset)=(0UL); + ((my_d)->my_var_def)=((struct my_node*)0UL); + ((my_d)->my_goto_defined)=(0UL); + ((my_d)->my_goto_label)=((my_mklabel)(((my_c)->my_as))); + (*(my_link))=(my_d); + return my_d; +} +struct my_decl*my_first_decl(struct my_compiler* my_c) +{ + struct my_decl* my_d = 0; + (my_d)=((my_c)->my_decls); + if ((unsigned long)(!(my_d))) { + return (struct my_decl*)0UL; + } + while (1) { + if ((unsigned long)(!((my_d)->my_l))) { + return my_d; + } + (my_d)=((my_d)->my_l); + } +} +void my_fixup(struct my_assembler* my_c, unsigned char * my_here, unsigned long my_delta) +{ + ((my_here)[0UL])=((unsigned char )my_delta); + ((my_here)[1UL])=((unsigned char )(unsigned long )(((unsigned long)(my_delta))>>((unsigned long)(8UL)))); + ((my_here)[2UL])=((unsigned char )(unsigned long )(((unsigned long)(my_delta))>>((unsigned long)(16UL)))); + ((my_here)[3UL])=((unsigned char )(unsigned long )(((unsigned long)(my_delta))>>((unsigned long)(24UL)))); +} +void my_fixup_label(struct my_assembler* my_c, struct my_label* my_l) +{ + struct my_fixup* my_f = 0; + if ((my_l)->my_fixed) { + (my_die)(((unsigned char *)"already fixed")); + } + ((my_l)->my_at)=((my_c)->my_at); + ((my_l)->my_fixed)=(1UL); + (my_f)=((my_l)->my_fix); + while (1) { + if ((unsigned long)(!(my_f))) { + break; + } + (my_fixup)((my_c),((my_f)->my_ptr),((unsigned long )(((unsigned long)((my_l)->my_at))-((unsigned long)((my_f)->my_at))))); + (my_f)=((my_f)->my_next); + } +} +void my_flush_coutput(struct my_compiler* my_c) +{ + (my_fflush)(((my_c)->my_cout)); +} +struct my_file*my_fopen(unsigned long my_fd, struct my_alloc* my_a) +{ + struct my_file* my_f = 0; + (my_f)=((struct my_file*)(my_alloc)((my_a),(56UL))); + ((my_f)->my_fd)=(my_fd); + ((my_f)->my_a)=(my_a); + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + ((my_f)->my_cap)=(4096UL); + ((my_f)->my_eof)=(0UL); + ((my_f)->my_buf)=((my_alloc)((my_a),((my_f)->my_cap))); + return my_f; +} +unsigned long my_fork() +{ + return (my_syscall)((57UL),(0UL),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +void my_fputb(struct my_file* my_f, unsigned char * my_s, unsigned long my_n) +{ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { + break; + } + (my_fputc)((my_f),((unsigned long )(my_s)[my_i])); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +void my_fputc(struct my_file* my_f, unsigned long my_ch) +{ + if ((unsigned long)(((long)((my_f)->my_w))==((long)((my_f)->my_cap)))) { + (my_fflush)((my_f)); + } + (((my_f)->my_buf)[(my_f)->my_w])=((unsigned char )my_ch); + ((my_f)->my_w)=((unsigned long )(((unsigned long)((my_f)->my_w))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(10)))) { + (my_fflush)((my_f)); + } +} +void my_fputd(struct my_file* my_out, unsigned long my_n) +{ + unsigned long my_a = 0; + if ((unsigned long)(((long)(my_n))<((long)(0UL)))) { + (my_fputc)((my_out),(45)); + (my_a)=((unsigned long )(-(unsigned long)((unsigned long )(((long)(my_n))%((long)(10UL)))))); + (my_n)=((unsigned long )(((long)(my_n))/((long)((unsigned long )(-(unsigned long)(10UL)))))); + } else { + (my_a)=((unsigned long )(((long)(my_n))%((long)(10UL)))); + (my_n)=((unsigned long )(((long)(my_n))/((long)(10UL)))); + } + if ((unsigned long)(((long)(my_n))!=((long)(0UL)))) { + (my_fputd)((my_out),(my_n)); + } + (my_fputc)((my_out),((unsigned long )(((unsigned long)(48))+((unsigned long)(my_a))))); +} +void my_fputs(struct my_file* my_f, unsigned char * my_s) +{ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(!((my_s)[my_i]))) { + break; + } + (my_fputc)((my_f),((unsigned long )(my_s)[my_i])); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +unsigned char *my_freadall(struct my_file* my_f, unsigned long * my_size) +{ + unsigned long my_i = 0; + unsigned long my_cap = 0; + unsigned char * my_ret = 0; + unsigned char * my_tmp = 0; + unsigned long my_ch = 0; + (my_i)=(0UL); + (my_cap)=(0UL); + while (1) { + (my_ch)=((my_fgetc)((my_f))); + if ((unsigned long)(((long)(my_ch))==((long)((unsigned long )(-(unsigned long)(1UL)))))) { + (*(my_size))=(my_i); + return my_ret; + } + if ((unsigned long)(((long)(my_i))==((long)(my_cap)))) { + if ((unsigned long)(((long)(my_cap))==((long)(0UL)))) { + (my_cap)=(4096UL); + (my_ret)=((my_alloc)(((my_f)->my_a),(my_cap))); + } else { + (my_cap)=((unsigned long )(((long)(my_cap))*((long)(2UL)))); + (my_tmp)=((my_alloc)(((my_f)->my_a),(my_cap))); + (my_memcpy)((my_tmp),(my_ret),(my_i)); + (my_free)(((my_f)->my_a),(my_ret)); + (my_ret)=(my_tmp); + } + } + ((my_ret)[my_i])=((unsigned char )my_ch); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +void my_free(struct my_alloc* my_a, unsigned char * my_p) +{ +} +void my_fseek(struct my_file* my_f, unsigned long my_off) +{ + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + ((my_f)->my_eof)=(0UL); + if ((unsigned long)(((long)((my_lseek)(((my_f)->my_fd),(my_off),(0UL))))!=((long)(my_off)))) { + (my_die)(((unsigned char *)"invalid seek")); + } +} +unsigned long my_fstat(unsigned long my_fd, unsigned char * my_buf) +{ + return (my_syscall)((5UL),(my_fd),((unsigned long )my_buf),(0UL),(0UL),(0UL),(0UL)); +} +unsigned long my_get(struct my_peg* my_c) +{ + unsigned long my_ch = 0; + if ((unsigned long)(((long)((my_c)->my_pos))==((long)((my_c)->my_size)))) { + return (unsigned long )(-(unsigned long)(1UL)); + } + (my_ch)=((unsigned long )((my_c)->my_src)[(my_c)->my_pos]); + ((my_c)->my_pos)=((unsigned long )(((unsigned long)((my_c)->my_pos))+((unsigned long)(1UL)))); + ((my_c)->my_col)=((unsigned long )(((unsigned long)((my_c)->my_col))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(10)))) { + ((my_c)->my_col)=(1UL); + ((my_c)->my_line)=((unsigned long )(((unsigned long)((my_c)->my_line))+((unsigned long)(1UL)))); + } + if ((unsigned long)(((long)(my_ch))==((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid nul in source")); + } + return my_ch; +} +unsigned long my_getdirents(unsigned long my_fd, unsigned char * my_buf, unsigned long my_len) +{ + return (my_syscall)((217UL),(my_fd),((unsigned long )my_buf),(my_len),(0UL),(0UL),(0UL)); +} +unsigned long my_hex2int(unsigned char * my_s, unsigned long my_len, unsigned long * my_ok) +{ + unsigned long my_i = 0; + unsigned long my_x = 0; + unsigned long my_d = 0; + (my_x)=(0UL); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; + } + (my_d)=((unsigned long )(my_s)[my_i]); + if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(48))))&&((unsigned long)(((long)(my_d))<=((long)(57)))))) { + (my_d)=((unsigned long )(((unsigned long)(my_d))-((unsigned long)(48)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(97))))&&((unsigned long)(((long)(my_d))<=((long)(102)))))) { + (my_d)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_d))-((unsigned long)(97)))))+((unsigned long)(10UL)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(65))))&&((unsigned long)(((long)(my_d))<=((long)(70)))))) { + (my_d)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_d))-((unsigned long)(65)))))+((unsigned long)(10UL)))); + } else { + (*(my_ok))=(0UL); + return 0UL; + } + (my_x)=((unsigned long )(((long)(my_x))*((long)(16UL)))); + (my_x)=((unsigned long )(((unsigned long)(my_x))+((unsigned long)(my_d)))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_x))>((long)(2147483647UL)))) { + (*(my_ok))=(0UL); + return 0UL; + } + } + (*(my_ok))=(1UL); + return my_x; +} +unsigned long my_hexdig(unsigned long my_ch, unsigned long * my_ok) +{ + if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(48))))&&((unsigned long)(((long)(my_ch))<=((long)(57)))))) { + (*(my_ok))=(1UL); + return (unsigned long )(((unsigned long)(my_ch))-((unsigned long)(48))); + } else if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(65))))&&((unsigned long)(((long)(my_ch))<=((long)(70)))))) { + (*(my_ok))=(1UL); + return (unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_ch))-((unsigned long)(70)))))+((unsigned long)(10UL))); + } else if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(97))))&&((unsigned long)(((long)(my_ch))<=((long)(102)))))) { + (*(my_ok))=(1UL); + return (unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_ch))-((unsigned long)(97)))))+((unsigned long)(10UL))); + } else { + (*(my_ok))=(0UL); + return 0UL; + } +} +unsigned long my_hoist_locals(struct my_compiler* my_c, struct my_decl* my_d, struct my_node* my_n, unsigned long my_offset) +{ + unsigned long my_kind = 0; + unsigned char * my_name = 0; + struct my_type* my_t = 0; + struct my_decl* my_v = 0; + if ((unsigned long)(!(my_n))) { + return my_offset; + } + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + while (1) { + if ((unsigned long)(!(my_n))) { + return my_offset; + } + (my_hoist_locals)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_offset)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { + while (1) { + if ((unsigned long)(!(my_n))) { + return my_offset; + } + (my_offset)=((my_hoist_locals)((my_c),(my_d),((my_n)->my_a),(my_offset))); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + return (my_hoist_locals)((my_c),(my_d),((my_n)->my_a),(my_offset)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + (my_name)=(((my_n)->my_a)->my_s); + (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_v)->my_goto_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate goto")); + } + ((my_v)->my_goto_defined)=(1UL); + return my_offset; + } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { + return my_offset; + } + (my_name)=(((my_n)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),((my_n)->my_b))); + ((my_n)->my_t)=(my_t); + (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_v)->my_var_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate variable")); + } + ((my_v)->my_var_type)=(my_t); + ((my_v)->my_var_defined)=(1UL); + (my_offset)=((unsigned long )(((unsigned long)(my_offset))+((unsigned long)((my_type_sizeof)((my_c),(my_t)))))); + ((my_v)->my_var_offset)=((unsigned long )(-(unsigned long)(my_offset))); + return my_offset; +} +void my_layout_struct(struct my_compiler* my_c, struct my_decl* my_d) +{ + struct my_node* my_m = 0; + unsigned long my_offset = 0; + unsigned char * my_name = 0; + struct my_decl* my_md = 0; + struct my_type* my_t = 0; + if ((my_d)->my_struct_layout_done) { + if ((unsigned long)(((long)((my_d)->my_struct_layout_done))==((long)(2UL)))) { + (my_cdie)((my_c),((unsigned char *)"circular struct definition")); + } + return; + } + ((my_d)->my_struct_layout_done)=(2UL); + (my_m)=(((my_d)->my_struct_def)->my_b); + (my_offset)=(0UL); + while (1) { + if ((unsigned long)(!(my_m))) { + break; + } + (my_name)=((((my_m)->my_a)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),(((my_m)->my_a)->my_b))); + (my_md)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_d)->my_member_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate member")); + } + ((my_md)->my_member_defined)=(1UL); + ((my_md)->my_member_type)=(my_t); + ((my_md)->my_member_offset)=(my_offset); + ((my_md)->my_member_def)=(my_m); + (my_offset)=((unsigned long )(((unsigned long)(my_offset))+((unsigned long)((my_type_sizeof)((my_c),(my_t)))))); + (my_m)=((my_m)->my_b); + } + ((my_d)->my_struct_size)=(my_offset); + ((my_d)->my_struct_layout_done)=(1UL); +} +void my_leave(struct my_peg* my_c, unsigned long my_tag) +{ + unsigned long my_nargs = 0; + unsigned long my_start = 0; + unsigned long my_line = 0; + unsigned long my_col = 0; + unsigned long my_end = 0; + unsigned char * my_tmp = 0; + (my_commit)((my_c)); + ((my_c)->my_fail_depth)=(0UL); + (my_nargs)=((unsigned long )(((unsigned long)((my_c)->my_depth))-((unsigned long)((((my_c)->my_stack)[(my_c)->my_sp]).my_depth)))); + (my_line)=((((my_c)->my_stack)[(my_c)->my_sp]).my_line); + (my_col)=((((my_c)->my_stack)[(my_c)->my_sp]).my_col); + (my_start)=((((my_c)->my_stack)[(my_c)->my_sp]).my_pos); + (my_end)=((my_c)->my_pos); + if ((unsigned long)(((long)((my_c)->my_op))==((long)((my_c)->my_cap)))) { + if ((unsigned long)(((long)((my_c)->my_cap))==((long)(0UL)))) { + ((my_c)->my_cap)=(1024UL); + ((my_c)->my_out)=((struct my_peg_op*)(my_alloc)(((my_c)->my_a),((unsigned long )(((long)((my_c)->my_cap))*((long)(48UL)))))); + } else { + ((my_c)->my_cap)=((unsigned long )(((long)((my_c)->my_cap))*((long)(2UL)))); + (my_tmp)=((my_alloc)(((my_c)->my_a),((unsigned long )(((long)((my_c)->my_cap))*((long)(48UL)))))); + (my_memcpy)((my_tmp),((unsigned char *)(my_c)->my_out),((unsigned long )(((long)((my_c)->my_op))*((long)(48UL))))); + (my_free)(((my_c)->my_a),((unsigned char *)(my_c)->my_out)); + ((my_c)->my_out)=((struct my_peg_op*)my_tmp); + } + } + ((((my_c)->my_out)[(my_c)->my_op]).my_tag)=(my_tag); + ((((my_c)->my_out)[(my_c)->my_op]).my_nargs)=(my_nargs); + ((((my_c)->my_out)[(my_c)->my_op]).my_start)=(my_start); + ((((my_c)->my_out)[(my_c)->my_op]).my_end)=(my_end); + ((((my_c)->my_out)[(my_c)->my_op]).my_line)=(my_line); + ((((my_c)->my_out)[(my_c)->my_op]).my_col)=(my_col); + ((my_c)->my_op)=((unsigned long )(((unsigned long)((my_c)->my_op))+((unsigned long)(1UL)))); + ((my_c)->my_depth)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((my_c)->my_depth))-((unsigned long)(my_nargs)))))+((unsigned long)(1UL)))); +} +unsigned long my_listen(unsigned long my_fd, unsigned long my_backlog) +{ + return (my_syscall)((50UL),(my_fd),(my_backlog),(0UL),(0UL),(0UL),(0UL)); +} +unsigned long my_literal(struct my_peg* my_c, unsigned char * my_s) +{ + unsigned long my_i = 0; + unsigned long my_ch = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(!((my_s)[my_i]))) { + break; + } + (my_ch)=((my_get)((my_c))); + if ((unsigned long)(((long)(my_ch))!=((long)((unsigned long )(my_s)[my_i])))) { + (my_fail)((my_c)); + ((my_c)->my_fail_literal)=(my_s); + return 0UL; + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + return 1UL; +} +unsigned long my_lseek(unsigned long my_fd, unsigned long my_off, unsigned long my_whence) +{ + return (my_syscall)((8UL),(my_fd),(my_off),(my_whence),(0UL),(0UL),(0UL)); +} +void my_main(unsigned long my_argc, unsigned char ** my_argv, unsigned char ** my_envp) +{ + struct my_alloc my_a = {0}; + struct my_compiler* my_c = 0; + struct my_node* my_p = 0; + struct my_decl* my_d = 0; + struct my_label* my_start = 0; + struct my_label* my_kstart = 0; + unsigned long my_i = 0; + unsigned long my_show = 0; + unsigned char * my_filename = 0; + struct my_file* my_err = 0; + (my_setup_alloc)((&(my_a))); + (my_c)=((my_comp_setup)((&(my_a)))); + (my_show)=(0UL); + (my_filename)=((unsigned char *)"a.out"); + (my_i)=(1UL); + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { + break; + } + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-o"))))) { + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { + (my_die)(((unsigned char *)"invalid -o at end of argument list")); + } + (my_filename)=((my_argv)[my_i]); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; + } + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-fdump"))))) { + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_show)=(1UL); + continue; + } + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-C"))))) { + ((my_c)->my_do_cout)=(1UL); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; + } + if ((unsigned long)(((long)(((my_argv)[my_i])[0UL]))==((long)((unsigned char )45)))) { + (my_die)(((unsigned char *)"invalid argument")); + } + (my_p)=((my_concat_program)((my_p),((my_parse)(((my_c)->my_p),((my_argv)[my_i]))))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + if (my_show) { + (my_err)=((my_fopen)((2UL),(&(my_a)))); + (my_show_node)((my_err),(my_p)); + (my_fflush)((my_err)); + return; + } + (my_compile)((my_c),(my_p)); + if ((my_c)->my_do_cout) { + (my_open_coutput)((my_c),(my_filename)); + (my_ctranslate)((my_c)); + return; + } + (my_emit_builtin)((my_c)); + (my_start)=((struct my_label*)0UL); + (my_d)=((my_find)((my_c),((unsigned char *)"_start"),((unsigned char *)0UL),(0UL))); + if ((unsigned long)((my_d)&&((my_d)->my_func_defined))) { + (my_start)=((my_d)->my_func_label); + } + (my_kstart)=((struct my_label*)0UL); + (my_d)=((my_find)((my_c),((unsigned char *)"_kstart"),((unsigned char *)0UL),(0UL))); + if ((unsigned long)((my_d)&&((my_d)->my_func_defined))) { + (my_kstart)=((my_d)->my_func_label); + } + (my_open_output)(((my_c)->my_as),(my_filename)); + (my_writeout)(((my_c)->my_as),(my_start),(my_kstart)); +} +unsigned long my_memcmp(unsigned char * my_a, unsigned char * my_b, unsigned long my_n) +{ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_n)))) { + return 0UL; + } + if ((unsigned long)(((long)((my_a)[my_i]))>((long)((my_b)[my_i])))) { + return 1UL; + } + if ((unsigned long)(((long)((my_a)[my_i]))<((long)((my_b)[my_i])))) { + return (unsigned long )(-(unsigned long)(1UL)); + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +void my_memcpy(unsigned char * my_dest, unsigned char * my_src, unsigned long my_size) +{ + unsigned long my_i = 0; + if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { + return; + } + if ((unsigned long)(((long)(my_src))>((long)(my_dest)))) { + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { + break; + } + ((my_dest)[my_i])=((my_src)[my_i]); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + } else if ((unsigned long)(((long)(my_src))<((long)(my_dest)))) { + (my_i)=(my_size); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(0UL)))) { + break; + } + (my_i)=((unsigned long )(((unsigned long)(my_i))-((unsigned long)(1UL)))); + ((my_dest)[my_i])=((my_src)[my_i]); + } + } +} +void my_memset(unsigned char * my_dest, unsigned long my_c, unsigned long my_size) +{ + unsigned long my_i = 0; + if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { + return; + } + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { + break; + } + ((my_dest)[my_i])=((unsigned char )my_c); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +unsigned long my_mkdir(unsigned char * my_name) +{ + return (my_syscall)((83UL),((unsigned long )my_name),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +struct my_label*my_mklabel(struct my_assembler* my_c) +{ + struct my_label* my_l = 0; + (my_l)=((struct my_label*)(my_alloc)(((my_c)->my_a),(24UL))); + ((my_l)->my_fix)=((struct my_fixup*)0UL); + ((my_l)->my_at)=(0UL); + ((my_l)->my_fixed)=(0UL); + return my_l; +} +struct my_node*my_mknode(struct my_parser* my_c, unsigned long my_kind, struct my_node* my_a, struct my_node* my_b) +{ + struct my_node* my_ret = 0; + (my_ret)=((struct my_node*)(my_alloc)(((my_c)->my_a),(72UL))); + ((my_ret)->my_kind)=(my_kind); + ((my_ret)->my_a)=(my_a); + ((my_ret)->my_b)=(my_b); + ((my_ret)->my_filename)=((unsigned char *)0UL); + ((my_ret)->my_lineno)=(0UL); + ((my_ret)->my_colno)=(0UL); + ((my_ret)->my_n)=(0UL); + ((my_ret)->my_s)=((unsigned char *)0UL); + ((my_ret)->my_t)=((struct my_type*)0UL); + (my_fillpos)((my_c),(my_ret)); + return my_ret; +} +struct my_node*my_mknode0(struct my_parser* my_c, unsigned long my_kind) +{ + return (my_mknode)((my_c),(my_kind),((struct my_node*)0UL),((struct my_node*)0UL)); +} +struct my_node*my_mknode1(struct my_parser* my_c, unsigned long my_kind, struct my_node* my_a) +{ + return (my_mknode)((my_c),(my_kind),(my_a),((struct my_node*)0UL)); +} +struct my_type*my_mktype(struct my_compiler* my_c, unsigned long my_kind, struct my_type* my_a, struct my_type* my_b, struct my_decl* my_st) +{ + struct my_type* my_t = 0; + (my_t)=((struct my_type*)(my_alloc)(((my_c)->my_a),(32UL))); + ((my_t)->my_kind)=(my_kind); + ((my_t)->my_st)=(my_st); + ((my_t)->my_val)=(my_a); + ((my_t)->my_arg)=(my_b); + return my_t; +} +struct my_type*my_mktype0(struct my_compiler* my_c, unsigned long my_kind) +{ + return (my_mktype)((my_c),(my_kind),((struct my_type*)0UL),((struct my_type*)0UL),((struct my_decl*)0UL)); +} +struct my_type*my_mktype1(struct my_compiler* my_c, unsigned long my_kind, struct my_type* my_a) +{ + return (my_mktype)((my_c),(my_kind),(my_a),((struct my_type*)0UL),((struct my_decl*)0UL)); +} +struct my_type*my_mktype2(struct my_compiler* my_c, unsigned long my_kind, struct my_type* my_a, struct my_type* my_b) +{ + return (my_mktype)((my_c),(my_kind),(my_a),(my_b),((struct my_decl*)0UL)); +} +struct my_type*my_mktype_struct(struct my_compiler* my_c, struct my_decl* my_st) +{ + return (my_mktype)((my_c),(my_TY_STRUCT),((struct my_type*)0UL),((struct my_type*)0UL),(my_st)); +} +unsigned long my_mmap(unsigned long my_addr, unsigned long my_len, unsigned long my_prot, unsigned long my_flags, unsigned long my_fd, unsigned long my_off) +{ + return (my_syscall)((9UL),(my_addr),(my_len),(my_prot),(my_flags),(my_fd),(my_off)); +} +unsigned long my_munmap(unsigned long my_addr, unsigned long my_len) +{ + return (my_syscall)((11UL),(my_addr),(my_len),(0UL),(0UL),(0UL),(0UL)); +} +struct my_decl*my_next_decl(struct my_compiler* my_c, struct my_decl* my_d) +{ + if ((unsigned long)(!(my_d))) { + return (struct my_decl*)0UL; + } + if ((my_d)->my_r) { + (my_d)=((my_d)->my_r); + while (1) { + if ((unsigned long)(!((my_d)->my_l))) { + return my_d; + } + (my_d)=((my_d)->my_l); + } + } + while (1) { + if ((unsigned long)(!((my_d)->my_p))) { + return (struct my_decl*)0UL; + } + if ((unsigned long)(((long)(((my_d)->my_p)->my_l))==((long)(my_d)))) { + return (my_d)->my_p; + } + (my_d)=((my_d)->my_p); + } +} +unsigned char *my_node_to_str(unsigned long my_kind) +{ + if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { + return (unsigned char *)"N_IDENT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { + return (unsigned char *)"N_NUM"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { + return (unsigned char *)"N_CHAR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { + return (unsigned char *)"N_STR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { + return (unsigned char *)"N_STMTLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { + return (unsigned char *)"N_EXPRLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CALL)))) { + return (unsigned char *)"N_CALL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { + return (unsigned char *)"N_DOT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGLIST)))) { + return (unsigned char *)"N_ARGLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNC)))) { + return (unsigned char *)"N_FUNC"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGDECL)))) { + return (unsigned char *)"N_ARGDECL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCDECL)))) { + return (unsigned char *)"N_FUNCDECL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_PROGRAM)))) { + return (unsigned char *)"N_PROGRAM"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCTYPE)))) { + return (unsigned char *)"N_FUNCTYPE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_PTRTYPE)))) { + return (unsigned char *)"N_PTRTYPE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STRUCT)))) { + return (unsigned char *)"N_STRUCT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MEMBERDECL)))) { + return (unsigned char *)"N_MEMBERDECL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MEMBERLIST)))) { + return (unsigned char *)"N_MEMBERLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + return (unsigned char *)"N_CONDLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_COND)))) { + return (unsigned char *)"N_COND"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUM)))) { + return (unsigned char *)"N_ENUM"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUMITEM)))) { + return (unsigned char *)"N_ENUMITEM"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUMLIST)))) { + return (unsigned char *)"N_ENUMLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + return (unsigned char *)"N_LOOP"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { + return (unsigned char *)"N_BREAK"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { + return (unsigned char *)"N_CONTINUE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { + return (unsigned char *)"N_RETURN"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_VARDECL)))) { + return (unsigned char *)"N_VARDECL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + return (unsigned char *)"N_LABEL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { + return (unsigned char *)"N_GOTO"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { + return (unsigned char *)"N_ASSIGN"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { + return (unsigned char *)"N_SIZEOF"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { + return (unsigned char *)"N_REF"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { + return (unsigned char *)"N_DEREF"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { + return (unsigned char *)"N_CAST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { + return (unsigned char *)"N_INDEX"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { + return (unsigned char *)"N_LT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { + return (unsigned char *)"N_GT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { + return (unsigned char *)"N_LE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { + return (unsigned char *)"N_GE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { + return (unsigned char *)"N_EQ"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { + return (unsigned char *)"N_NE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { + return (unsigned char *)"N_ADD"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { + return (unsigned char *)"N_SUB"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { + return (unsigned char *)"N_MUL"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { + return (unsigned char *)"N_LSH"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { + return (unsigned char *)"N_RSH"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { + return (unsigned char *)"N_BNOT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { + return (unsigned char *)"N_BOR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { + return (unsigned char *)"N_BAND"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { + return (unsigned char *)"N_AND"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { + return (unsigned char *)"N_OR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { + return (unsigned char *)"N_XOR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { + return (unsigned char *)"N_NOT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { + return (unsigned char *)"N_POS"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { + return (unsigned char *)"N_NEG"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { + return (unsigned char *)"N_DIV"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { + return (unsigned char *)"N_MOD"; + } + return (unsigned char *)"(invalid)"; +} +unsigned long my_open(unsigned char * my_name, unsigned long my_flags, unsigned long my_mode) +{ + return (my_syscall)((2UL),((unsigned long )my_name),(my_flags),(my_mode),(0UL),(0UL),(0UL)); +} +void my_open_coutput(struct my_compiler* my_c, unsigned char * my_filename) +{ + unsigned long my_fd = 0; + if ((my_c)->my_cout) { + (my_die)(((unsigned char *)"multiple output files")); + } + (my_unlink)((my_filename)); + (my_fd)=((my_open)((my_filename),((unsigned long )(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(6UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long )(((unsigned long)(6UL))<<((unsigned long)(3UL))))))))+((unsigned long)(6UL)))))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open output")); + } + ((my_c)->my_cout)=((my_fopen)((my_fd),((my_c)->my_a))); +} +void my_open_output(struct my_assembler* my_c, unsigned char * my_filename) +{ + unsigned long my_fd = 0; + if ((my_c)->my_out) { + (my_die)(((unsigned char *)"multiple output files")); + } + (my_unlink)((my_filename)); + (my_fd)=((my_open)((my_filename),((unsigned long )(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(7UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long )(((unsigned long)(7UL))<<((unsigned long)(3UL))))))))+((unsigned long)(7UL)))))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open output")); + } + ((my_c)->my_out)=((my_fopen)((my_fd),((my_c)->my_a))); +} +unsigned long my_p_add_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_add_expr)); + (my_ok)=((my_p_mul_expr)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_add_op)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_sub_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_or_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_xor_op)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_mul_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_add_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_add_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_add_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"+"))); + if (my_ok) { + (my_leave)((my_c),(my_P_add_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_and_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_and_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"&"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"&"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_and_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_arg_decl(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_arg_decl)); + (my_ok)=((my_p_ident)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_arg_decl)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_assign_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_assign_stmt)); + (my_ok)=((my_p_unary_expr)((my_c))); + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"="))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_assign_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_band_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_band_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"&&"))); + if (my_ok) { + (my_leave)((my_c),(my_P_band_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_bnot_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_bnot_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"!"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"="))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_bnot_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_bool_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_bool_expr)); + (my_ok)=((my_p_comp_expr)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_band_op)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_bor_op)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_comp_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_bool_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_bor_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_bor_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"||"))); + if (my_ok) { + (my_leave)((my_c),(my_P_bor_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_break(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_break)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"break"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_break)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_break_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_break_stmt)); + (my_ok)=((my_p_break)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_break_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_byte(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_byte)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"byte"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_byte)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_call_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_call_expr)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_p_expr)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)","))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)","))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_call_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_cast_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_cast_expr)); + (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_cast_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_char(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_char)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"\134"))); + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"\134"))); + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_char)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_comp_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_comp_expr)); + (my_ok)=((my_p_add_expr)((my_c))); + if (my_ok) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_le_op)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_ge_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_lt_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_gt_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_eq_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_ne_op)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_add_expr)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_comp_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_compound_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_compound_stmt)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"{"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_p_stmt)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"}"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_compound_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_continue(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_continue)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"continue"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_continue)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_continue_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_continue_stmt)); + (my_ok)=((my_p_continue)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_continue_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_dec(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_dec)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789"))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_dec)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_deref_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_deref_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"*"))); + if (my_ok) { + (my_leave)((my_c),(my_P_deref_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_div_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_div_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"/"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"/"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_div_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_elif_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_elif_stmt)); + (my_ok)=((my_p_else)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_if)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_compound_stmt)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_elif_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_else(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_else)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"else"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_else)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_else_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_else_stmt)); + (my_ok)=((my_p_else)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_compound_stmt)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_else_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_empty_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_empty_stmt)); + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_empty_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_enum(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_enum)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"enum"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_enum)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_enum_decl(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_enum_decl)); + (my_ok)=((my_p_enum)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"{"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_p_enum_item)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)","))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_enum_item)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)","))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"}"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_enum_decl)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_enum_item(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_enum_item)); + (my_ok)=((my_p_ident)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"="))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_enum_item)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_eq_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_eq_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"=="))); + if (my_ok) { + (my_leave)((my_c),(my_P_eq_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_expr)); + (my_ok)=((my_p_bool_expr)((my_c))); + if (my_ok) { + (my_leave)((my_c),(my_P_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_expr_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_expr_stmt)); + (my_ok)=((my_p_expr)((my_c))); + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_expr_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_func(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_func)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"func"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_func)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_func_decl(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_func_decl)); + (my_ok)=((my_p_ident)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_func_type)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_compound_stmt)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_func_decl)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_func_type(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_func_type)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_p_arg_decl)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)","))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_arg_decl)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)","))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_func_type)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_ge_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_ge_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)">="))); + if (my_ok) { + (my_leave)((my_c),(my_P_ge_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_goto(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_goto)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"goto"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_goto)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_goto_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_goto_stmt)); + (my_ok)=((my_p_goto)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_ident)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_goto_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_grammar(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_grammar)); + (my_ok)=((my_p_sp)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_enum_decl)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_struct_decl)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_func_decl)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_any)((my_c))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_grammar)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_gt_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_gt_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)">"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"="))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)">"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_gt_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_hex(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_hex)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"0x"))); + if (my_ok) { + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFabcdef"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFabcdef"))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_hex)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_ident(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_ident)); + (my_choice)((my_c)); + (my_ok)=((my_p_reserved)((my_c))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + if (my_ok) { + (my_ok)=((my_charset)((my_c),((unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + } + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_ident)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_if(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_if)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"if"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_if)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_if_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_if_stmt)); + (my_ok)=((my_p_if)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_compound_stmt)((my_c))); + } + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_p_elif_stmt)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_p_else_stmt)((my_c))); + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_if_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_index_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_index_expr)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"["))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"]"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_index_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_int(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_int)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"int"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_int)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_label_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_label_stmt)); + (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_ident)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_label_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_le_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_le_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"<="))); + if (my_ok) { + (my_leave)((my_c),(my_P_le_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_loop(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_loop)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"loop"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_loop)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_loop_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_loop_stmt)); + (my_ok)=((my_p_loop)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_compound_stmt)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_loop_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_lsh_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_lsh_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"<<"))); + if (my_ok) { + (my_leave)((my_c),(my_P_lsh_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_lt_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_lt_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"<"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"="))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"<"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_lt_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_member_decl(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_member_decl)); + (my_ok)=((my_p_ident)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_member_decl)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_member_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_member_expr)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"."))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_ident)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_member_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_mod_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_mod_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"%"))); + if (my_ok) { + (my_leave)((my_c),(my_P_mod_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_mul_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_mul_expr)); + (my_ok)=((my_p_shift_expr)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_mul_op)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_div_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_mod_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_and_op)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_shift_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_mul_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_mul_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_mul_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"*"))); + if (my_ok) { + (my_leave)((my_c),(my_P_mul_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_ne_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_ne_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"!="))); + if (my_ok) { + (my_leave)((my_c),(my_P_ne_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_neg_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_neg_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"-"))); + if (my_ok) { + (my_leave)((my_c),(my_P_neg_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_not_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_not_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"~"))); + if (my_ok) { + (my_leave)((my_c),(my_P_not_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_or_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_or_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"|"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"|"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_or_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_pos_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_pos_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"+"))); + if (my_ok) { + (my_leave)((my_c),(my_P_pos_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_post_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_post_expr)); + (my_ok)=((my_p_primary)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_index_expr)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_call_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_member_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_cast_expr)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_post_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_primary(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_primary)); + (my_choice)((my_c)); + (my_ok)=((my_p_ident)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_hex)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_dec)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_str)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_char)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_sizeof_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_leave)((my_c),(my_P_primary)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_ptr_type(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_ptr_type)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"*"))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_ptr_type)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_ref_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_ref_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"&"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"&"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_ref_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_reserved(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_reserved)); + (my_choice)((my_c)); + (my_ok)=((my_p_return)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_break)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_sizeof)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_if)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_else)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_loop)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_continue)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_goto)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_var)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_enum)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_struct)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_byte)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_int)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_void)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_func)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_leave)((my_c),(my_P_reserved)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_return(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_return)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"return"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_return)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_return_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_return_stmt)); + (my_ok)=((my_p_return)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_p_expr)((my_c))); + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_return_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_rsh_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_rsh_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)">>"))); + if (my_ok) { + (my_leave)((my_c),(my_P_rsh_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_shift_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_shift_expr)); + (my_ok)=((my_p_unary_expr)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_lsh_op)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_rsh_op)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_unary_expr)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_shift_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_sizeof(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_sizeof)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"sizeof"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_sizeof)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_sizeof_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_sizeof_expr)); + (my_ok)=((my_p_sizeof)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_expr)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_sizeof_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_sp(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_sp)); + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"\011\012\015 "))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"//"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"\012\015"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + if (my_ok) { + (my_leave)((my_c),(my_P_sp)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_stmt)); + (my_choice)((my_c)); + (my_ok)=((my_p_if_stmt)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_loop_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_break_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_continue_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_return_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_var_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_label_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_goto_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_assign_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_expr_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_empty_stmt)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_compound_stmt)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_leave)((my_c),(my_P_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_str(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_str)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"\042"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"\134"))); + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"\042"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"\042"))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_str)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_struct(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_struct)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"struct"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_struct)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_struct_decl(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_struct_decl)); + (my_ok)=((my_p_struct)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_ident)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"{"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_p_member_decl)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"}"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_struct_decl)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_sub_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_sub_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"-"))); + if (my_ok) { + (my_leave)((my_c),(my_P_sub_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_type(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_type)); + (my_choice)((my_c)); + (my_ok)=((my_p_ident)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_byte)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_int)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_void)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_func)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_func_type)((my_c))); + } + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_ptr_type)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_leave)((my_c),(my_P_type)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_unary_expr(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_unary_expr)); + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_p_ref_op)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_deref_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_pos_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_neg_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_not_op)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_p_bnot_op)((my_c))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); + } + if (my_ok) { + (my_ok)=((my_p_post_expr)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_unary_expr)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_var(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_var)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"var"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_var)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_var_stmt(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_var_stmt)); + (my_ok)=((my_p_var)((my_c))); + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_ident)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_ok)=((my_p_type)((my_c))); + } + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)";"))); + } + if (my_ok) { + (my_ok)=((my_p_sp)((my_c))); + } + if (my_ok) { + (my_leave)((my_c),(my_P_var_stmt)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_void(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_void)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"void"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_void)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long my_p_xor_op(struct my_peg* my_c) +{ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_xor_op)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"^"))); + if (my_ok) { + (my_leave)((my_c),(my_P_xor_op)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +struct my_node*my_parse(struct my_parser* my_c, unsigned char * my_filename) +{ + struct my_file* my_f = 0; + unsigned long my_fd = 0; + unsigned long my_len = 0; + unsigned char * my_src = 0; + struct my_peg_node* my_pn = 0; + (my_fd)=((my_open)((my_filename),(0UL),(0UL))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_fdputs)((2UL),((unsigned char *)"failed to open ")); + (my_fdputs)((2UL),(my_filename)); + (my_fdputs)((2UL),((unsigned char *)"\012")); + (my_exit)((1UL)); + } + (my_f)=((my_fopen)((my_fd),((my_c)->my_a))); + (my_src)=((my_freadall)((my_f),(&(my_len)))); + (my_fclose)((my_f)); + (my_peg_reset)(((my_c)->my_p),(my_filename),(my_src),(my_len)); + (my_pn)=((my_peg_parse)(((my_c)->my_p),(my_P_sp))); + return (my_reconstruct)((my_c),(my_pn)); +} +void my_peg_free(struct my_peg* my_c) +{ + (my_free)(((my_c)->my_a),((unsigned char *)(my_c)->my_stack)); + (my_free)(((my_c)->my_a),((unsigned char *)(my_c)->my_nstack)); + (my_free)(((my_c)->my_a),((unsigned char *)(my_c)->my_out)); + (my_free)(((my_c)->my_a),((unsigned char *)my_c)); +} +struct my_peg*my_peg_new(unsigned char * my_filename, unsigned char * my_src, unsigned long my_len, struct my_alloc* my_a) +{ + struct my_peg* my_c = 0; + (my_c)=((struct my_peg*)(my_alloc)((my_a),(184UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_filename)=(my_filename); + ((my_c)->my_src)=(my_src); + ((my_c)->my_size)=(my_len); + ((my_c)->my_pos)=(0UL); + ((my_c)->my_tag)=(0UL); + ((my_c)->my_line)=(1UL); + ((my_c)->my_col)=(1UL); + ((my_c)->my_tag)=(0UL); + ((my_c)->my_fail_depth)=(0UL); + ((my_c)->my_fail_tag)=(0UL); + ((my_c)->my_fail_line)=(0UL); + ((my_c)->my_fail_col)=(0UL); + ((my_c)->my_fail_literal)=((unsigned char *)0UL); + ((my_c)->my_limit)=(1024UL); + ((my_c)->my_stack)=((struct my_peg_frame*)(my_alloc)((my_a),((unsigned long )(((long)((my_c)->my_limit))*((long)(48UL)))))); + ((my_c)->my_sp)=(0UL); + ((my_c)->my_depth)=(0UL); + ((my_c)->my_op)=(0UL); + ((my_c)->my_out)=((struct my_peg_op*)0UL); + ((my_c)->my_cap)=(0UL); + ((my_c)->my_ncap)=(1024UL); + ((my_c)->my_nstack)=((struct my_peg_node**)(my_alloc)((my_a),((unsigned long )(((long)((my_c)->my_ncap))*((long)(8UL)))))); + ((my_c)->my_np)=(0UL); + return my_c; +} +struct my_peg_node*my_peg_parse(struct my_peg* my_c, unsigned long my_sp) +{ + (my_choice)((my_c)); + if ((unsigned long)(!((my_p_grammar)((my_c))))) { + (my_fdputs)((2UL),((unsigned char *)"syntax error at ")); + (my_fdputs)((2UL),((my_c)->my_filename)); + (my_fdputs)((2UL),((unsigned char *)":")); + (my_fdputd)((2UL),((my_c)->my_fail_line)); + (my_fdputs)((2UL),((unsigned char *)":")); + (my_fdputd)((2UL),((my_c)->my_fail_col)); + (my_fdputs)((2UL),((unsigned char *)" expected ")); + (my_fdputs)((2UL),((my_tag_to_str)(((my_c)->my_fail_tag)))); + if ((my_c)->my_fail_literal) { + (my_fdputs)((2UL),((unsigned char *)" '")); + (my_fdputs)((2UL),((my_c)->my_fail_literal)); + (my_fdputs)((2UL),((unsigned char *)"'")); + } + (my_fdputs)((2UL),((unsigned char *)"\012")); + (my_exit)((1UL)); + } + (my_commit)((my_c)); + return (my_construct)((my_c),(my_sp)); +} +void my_peg_reset(struct my_peg* my_c, unsigned char * my_filename, unsigned char * my_src, unsigned long my_len) +{ + ((my_c)->my_filename)=(my_filename); + ((my_c)->my_src)=(my_src); + ((my_c)->my_size)=(my_len); + ((my_c)->my_pos)=(0UL); + ((my_c)->my_tag)=(0UL); + ((my_c)->my_line)=(1UL); + ((my_c)->my_col)=(1UL); + ((my_c)->my_tag)=(0UL); + ((my_c)->my_fail_depth)=(0UL); + ((my_c)->my_fail_tag)=(0UL); + ((my_c)->my_fail_line)=(0UL); + ((my_c)->my_fail_col)=(0UL); + ((my_c)->my_fail_literal)=((unsigned char *)0UL); + ((my_c)->my_depth)=(0UL); + ((my_c)->my_sp)=(0UL); + ((my_c)->my_op)=(0UL); + ((my_c)->my_np)=(0UL); +} +void my_peg_show(struct my_file* my_out, struct my_peg_node* my_n) +{ + unsigned long my_i = 0; + unsigned long my_ch = 0; + unsigned char * my_hex = 0; + (my_hex)=((unsigned char *)"0123456789abcdef"); + (my_fputs)((my_out),((unsigned char *)"(")); + (my_fputs)((my_out),((my_tag_to_str)(((my_n)->my_tag)))); + if ((my_n)->my_child) { + (my_n)=((my_n)->my_child); + while (1) { + if ((unsigned long)(!(my_n))) { + break; + } + (my_fputc)((my_out),(32)); + (my_peg_show)((my_out),(my_n)); + (my_n)=((my_n)->my_next); + } + } else { + (my_fputc)((my_out),(32)); + (my_fputc)((my_out),(34)); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)((my_n)->my_len)))) { + break; + } + (my_ch)=((unsigned long )((my_n)->my_str)[my_i]); + if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { + (my_fputc)((my_out),(92)); + (my_fputc)((my_out),(120)); + (my_fputc)((my_out),((unsigned long )(my_hex)[(unsigned long )(((unsigned long)(my_ch))>>((unsigned long)(4UL)))])); + (my_fputc)((my_out),((unsigned long )(my_hex)[(unsigned long )(((unsigned long)(my_ch))&((unsigned long)(15UL)))])); + } else { + (my_fputc)((my_out),(my_ch)); + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_fputc)((my_out),(34)); + } + (my_fputs)((my_out),((unsigned char *)")")); +} +unsigned long my_pipe(unsigned long * my_rfd, unsigned long * my_wfd) +{ + unsigned long my_buf = 0; + unsigned long my_ret = 0; + (my_ret)=((my_syscall)((22UL),((unsigned long )&(my_buf)),(0UL),(0UL),(0UL),(0UL),(0UL))); + if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { + (*(my_rfd))=((unsigned long )(((unsigned long)(my_buf))&((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(1UL))))>>((unsigned long)(32UL))))))); + (*(my_wfd))=((unsigned long )(((unsigned long)(my_buf))>>((unsigned long)(32UL)))); + } + return my_ret; +} +unsigned long my_poll(unsigned long * my_pfd, unsigned long my_nfd, unsigned long my_timeout) +{ + return (my_syscall)((7UL),((unsigned long )my_pfd),(my_nfd),(my_timeout),(0UL),(0UL),(0UL)); +} +struct my_type*my_prototype(struct my_compiler* my_c, struct my_node* my_n) +{ + struct my_type* my_a = 0; + struct my_type* my_b = 0; + struct my_decl* my_st = 0; + unsigned long my_kind = 0; + if ((unsigned long)(!(my_n))) { + return (struct my_type*)0UL; + } + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=(0UL); + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { + if ((unsigned long)(!((my_strcmp)(((my_n)->my_s),((unsigned char *)"void"))))) { + return (my_mktype0)((my_c),(my_TY_VOID)); + } + if ((unsigned long)(!((my_strcmp)(((my_n)->my_s),((unsigned char *)"int"))))) { + return (my_mktype0)((my_c),(my_TY_INT)); + } + if ((unsigned long)(!((my_strcmp)(((my_n)->my_s),((unsigned char *)"byte"))))) { + return (my_mktype0)((my_c),(my_TY_BYTE)); + } + (my_st)=((my_find)((my_c),((my_n)->my_s),((unsigned char *)0UL),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_st)))||((unsigned long)(!((my_st)->my_struct_defined))))) { + (my_cdie)((my_c),((unsigned char *)"unknown struct")); + } + return (my_mktype_struct)((my_c),(my_st)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGLIST)))) { + (my_a)=((my_prototype)((my_c),(((my_n)->my_a)->my_b))); + (my_b)=((my_prototype)((my_c),((my_n)->my_b))); + (my_kind)=((my_a)->my_kind); + if ((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_INT))))&&((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_BYTE))))&&((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_PTR))))&&((unsigned long)(((long)(my_kind))!=((long)(my_TY_FUNC)))))))))) { + (my_cdie)((my_c),((unsigned char *)"not a ptr arg")); + } + return (my_mktype2)((my_c),(my_TY_ARG),(my_a),(my_b)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCTYPE)))) { + if ((my_n)->my_b) { + (my_a)=((my_prototype)((my_c),((my_n)->my_b))); + } else { + (my_a)=((my_mktype0)((my_c),(my_TY_VOID))); + } + (my_b)=((my_prototype)((my_c),((my_n)->my_a))); + (my_kind)=((my_a)->my_kind); + if ((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_VOID))))&&((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_INT))))&&((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_BYTE))))&&((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_PTR))))&&((unsigned long)(((long)(my_kind))!=((long)(my_TY_FUNC)))))))))))) { + (my_cdie)((my_c),((unsigned char *)"not a ptr return")); + } + return (my_mktype2)((my_c),(my_TY_FUNC),(my_a),(my_b)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_PTRTYPE)))) { + return (my_mktype1)((my_c),(my_TY_PTR),((my_prototype)((my_c),((my_n)->my_a)))); + } else { + (my_cdie)((my_c),((unsigned char *)"prototype: invalid type")); + } +} +void my_putchar(struct my_assembler* my_c, unsigned long my_ch) +{ + (my_fputc)(((my_c)->my_out),(my_ch)); +} +unsigned long my_read(unsigned long my_fd, unsigned char * my_buf, unsigned long my_n) +{ + return (my_syscall)((0UL),(my_fd),((unsigned long )my_buf),(my_n),(0UL),(0UL),(0UL)); +} +unsigned char *my_readall(unsigned long my_fd, unsigned long * my_len, struct my_alloc* my_a) +{ + unsigned char * my_buf = 0; + unsigned char * my_tmp = 0; + unsigned long my_cap = 0; + unsigned long my_newcap = 0; + unsigned long my_ret = 0; + unsigned long my_n = 0; + (my_cap)=(0UL); + (my_n)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_n))==((long)(my_cap)))) { + if ((unsigned long)(((long)(my_cap))==((long)(0UL)))) { + (my_newcap)=(4096UL); + } else { + (my_newcap)=((unsigned long )(((long)(my_cap))*((long)(2UL)))); + } + (my_tmp)=((my_alloc)((my_a),(my_newcap))); + (my_memcpy)((my_tmp),(my_buf),(my_n)); + (my_free)((my_a),(my_buf)); + (my_buf)=(my_tmp); + (my_cap)=(my_newcap); + } + (my_ret)=((my_read)((my_fd),(&((my_buf)[my_n])),((unsigned long )(((unsigned long)(my_cap))-((unsigned long)(my_n)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_die)(((unsigned char *)"readall failed")); + } + if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { + break; + } + (my_n)=((unsigned long )(((unsigned long)(my_n))+((unsigned long)(my_ret)))); + } + (*(my_len))=(my_n); + return my_buf; +} +struct my_node*my_reconstruct(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node** my_link = 0; + struct my_node* my_n = 0; + struct my_node* my_p = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_grammar)))),((unsigned char *)"grammar")); + (my_ret)=((struct my_node*)0UL); + (my_link)=(&(my_ret)); + (my_pn)=((my_pn)->my_child); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_enum_decl)))) { + (my_n)=((my_reconstruct_enum)((my_c),(my_pn))); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_struct_decl)))) { + (my_n)=((my_reconstruct_struct)((my_c),(my_pn))); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_func_decl)))) { + (my_n)=((my_reconstruct_func)((my_c),(my_pn))); + } else { + (my_die)(((unsigned char *)"invalid decl")); + } + (my_p)=((my_mknode1)((my_c),(my_N_PROGRAM),(my_n))); + (my_copypos)((my_p),(my_pn)); + (*(my_link))=(my_p); + (my_link)=(&((my_p)->my_b)); + (my_pn)=((my_pn)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_add(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node* my_n = 0; + struct my_node** my_link = 0; + unsigned long my_kind = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_add_expr)))),((unsigned char *)"add_expr")); + (my_ret)=((my_reconstruct_mul)((my_c),((my_pn)->my_child))); + (my_link)=(&(my_ret)); + (my_pn)=(((my_pn)->my_child)->my_next); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_add_op)))) { + (my_kind)=(my_N_ADD); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_sub_op)))) { + (my_kind)=(my_N_SUB); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_or_op)))) { + (my_kind)=(my_N_OR); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_xor_op)))) { + (my_kind)=(my_N_XOR); + } else { + (my_die)(((unsigned char *)"invalid addop")); + } + (my_n)=((my_reconstruct_mul)((my_c),((my_pn)->my_next))); + (*(my_link))=((my_mknode)((my_c),(my_kind),(*(my_link)),(my_n))); + (my_copypos)((*(my_link)),(my_pn)); + (my_pn)=(((my_pn)->my_next)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_arg_decl(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_arg_decl)))),((unsigned char *)"arg_decl")); + (my_a)=((my_reconstruct_ident)((my_c),((my_pn)->my_child))); + (my_b)=((my_reconstruct_type)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode)((my_c),(my_N_ARGDECL),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_args(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node** my_link = 0; + struct my_node* my_a = 0; + struct my_node* my_n = 0; + (my_ret)=((struct my_node*)0UL); + (my_link)=(&(my_ret)); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + (my_a)=((my_reconstruct_expr)((my_c),(my_pn))); + (my_n)=((my_mknode1)((my_c),(my_N_EXPRLIST),(my_a))); + (my_copypos)((my_n),(my_pn)); + (*(my_link))=(my_n); + (my_link)=(&((my_n)->my_b)); + (my_pn)=((my_pn)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_assign(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_assign_stmt)))),((unsigned char *)"assign_stmt")); + (my_a)=((my_reconstruct_unary)((my_c),((my_pn)->my_child))); + (my_b)=((my_reconstruct_expr)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode)((my_c),(my_N_ASSIGN),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_bool(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node* my_n = 0; + struct my_node** my_link = 0; + unsigned long my_kind = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_bool_expr)))),((unsigned char *)"bool_expr")); + (my_ret)=((my_reconstruct_comp)((my_c),((my_pn)->my_child))); + (my_link)=(&(my_ret)); + (my_pn)=(((my_pn)->my_child)->my_next); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_band_op)))) { + (my_kind)=(my_N_BAND); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_bor_op)))) { + (my_kind)=(my_N_BOR); + } else { + (my_die)(((unsigned char *)"invalid boolop")); + } + (my_n)=((my_reconstruct_comp)((my_c),((my_pn)->my_next))); + (*(my_link))=((my_mknode)((my_c),(my_kind),(*(my_link)),(my_n))); + (my_copypos)((*(my_link)),(my_pn)); + (my_link)=(&((*(my_link))->my_b)); + (my_pn)=(((my_pn)->my_next)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_break(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_break_stmt)))),((unsigned char *)"break_stmt")); + (my_n)=((my_mknode0)((my_c),(my_N_BREAK))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_char(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + unsigned long my_i = 0; + unsigned long my_x = 0; + unsigned long my_ok = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_char)))),((unsigned char *)"char")); + (my_i)=(1UL); + (my_x)=((my_unescape)(((my_pn)->my_str),(&(my_i)),((unsigned long )(((unsigned long)((my_pn)->my_len))-((unsigned long)(1UL)))),(&(my_ok)))); + if ((unsigned long)(((unsigned long)(!(my_ok)))||((unsigned long)(((long)(my_i))!=((long)((unsigned long )(((unsigned long)((my_pn)->my_len))-((unsigned long)(1UL))))))))) { + (my_die)(((unsigned char *)"invalid character")); + } + (my_n)=((my_mknode0)((my_c),(my_N_CHAR))); + (my_copypos)((my_n),(my_pn)); + ((my_n)->my_n)=(my_x); + return my_n; +} +struct my_node*my_reconstruct_comp(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + unsigned long my_kind = 0; + unsigned long my_tag = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_comp_expr)))),((unsigned char *)"comp_expr")); + (my_a)=((my_reconstruct_add)((my_c),((my_pn)->my_child))); + if ((unsigned long)(!(((my_pn)->my_child)->my_next))) { + return my_a; + } + (my_tag)=((((my_pn)->my_child)->my_next)->my_tag); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_le_op)))) { + (my_kind)=(my_N_LE); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_ge_op)))) { + (my_kind)=(my_N_GE); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_lt_op)))) { + (my_kind)=(my_N_LT); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_gt_op)))) { + (my_kind)=(my_N_GT); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_eq_op)))) { + (my_kind)=(my_N_EQ); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_ne_op)))) { + (my_kind)=(my_N_NE); + } else { + (my_die)(((unsigned char *)"invalid compop")); + } + (my_b)=((my_reconstruct_add)((my_c),((((my_pn)->my_child)->my_next)->my_next))); + (my_n)=((my_mknode)((my_c),(my_kind),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_compound(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node* my_n = 0; + struct my_node* my_a = 0; + struct my_node** my_link = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_compound_stmt)))),((unsigned char *)"compound_stmt")); + (my_pn)=((my_pn)->my_child); + (my_ret)=((struct my_node*)0UL); + (my_link)=(&(my_ret)); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + (my_a)=((my_reconstruct_stmt)((my_c),(my_pn))); + if (my_a) { + (my_n)=((my_mknode1)((my_c),(my_N_STMTLIST),(my_a))); + (my_copypos)((my_n),(my_pn)); + (*(my_link))=(my_n); + (my_link)=(&((my_n)->my_b)); + } + (my_pn)=((my_pn)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_continue(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_continue_stmt)))),((unsigned char *)"continue_stmt")); + (my_n)=((my_mknode0)((my_c),(my_N_CONTINUE))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_dec(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + unsigned long my_x = 0; + struct my_node* my_n = 0; + unsigned long my_ok = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_dec)))),((unsigned char *)"dec")); + (my_x)=((my_dec2int)(((my_pn)->my_str),((my_pn)->my_len),(&(my_ok)))); + if ((unsigned long)(!(my_ok))) { + (my_die)(((unsigned char *)"invalid dec")); + } + (my_n)=((my_mknode0)((my_c),(my_N_NUM))); + (my_copypos)((my_n),(my_pn)); + ((my_n)->my_n)=(my_x); + return my_n; +} +struct my_node*my_reconstruct_empty(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_empty_stmt)))),((unsigned char *)"empty_stmt")); + return (struct my_node*)0UL; +} +struct my_node*my_reconstruct_enum(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node** my_link = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_enum_decl)))),((unsigned char *)"enum_decl")); + (my_n)=((my_mknode)((my_c),(my_N_ENUM),((struct my_node*)0UL),((struct my_node*)0UL))); + (my_copypos)((my_n),(my_pn)); + (my_pn)=(((my_pn)->my_child)->my_next); + (my_link)=(&((my_n)->my_b)); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + (my_a)=((my_mknode1)((my_c),(my_N_ENUMLIST),((my_reconstruct_enum_item)((my_c),(my_pn))))); + (my_copypos)((my_a),(my_pn)); + (*(my_link))=(my_a); + (my_link)=(&((my_a)->my_b)); + (my_pn)=((my_pn)->my_next); + } + return my_n; +} +struct my_node*my_reconstruct_enum_item(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_enum_item)))),((unsigned char *)"enum_item")); + (my_a)=((my_reconstruct_ident)((my_c),((my_pn)->my_child))); + (my_b)=((struct my_node*)0UL); + if (((my_pn)->my_child)->my_next) { + (my_b)=((my_reconstruct_expr)((my_c),(((my_pn)->my_child)->my_next))); + (my_assert)(((unsigned long)(((long)((my_b)->my_kind))==((long)(my_N_NUM)))),((unsigned char *)"enum must be num")); + } + (my_n)=((my_mknode)((my_c),(my_N_ENUMITEM),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_expr(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_expr)))),((unsigned char *)"expr")); + return (my_reconstruct_bool)((my_c),((my_pn)->my_child)); +} +struct my_node*my_reconstruct_expr_stmt(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_expr_stmt)))),((unsigned char *)"expr_stmt")); + return (my_reconstruct_expr)((my_c),((my_pn)->my_child)); +} +struct my_node*my_reconstruct_func(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_d = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_func_decl)))),((unsigned char *)"func_def")); + (my_a)=((my_reconstruct_ident)((my_c),((my_pn)->my_child))); + (my_b)=((my_reconstruct_func_type)((my_c),(((my_pn)->my_child)->my_next))); + (my_d)=((my_mknode)((my_c),(my_N_FUNCDECL),(my_a),(my_b))); + (my_copypos)((my_d),(my_pn)); + if ((unsigned long)(!((((my_pn)->my_child)->my_next)->my_next))) { + return my_d; + } + (my_b)=((my_reconstruct_compound)((my_c),((((my_pn)->my_child)->my_next)->my_next))); + (my_n)=((my_mknode)((my_c),(my_N_FUNC),(my_d),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_func_type(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + struct my_node** my_link = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_func_type)))),((unsigned char *)"func_type")); + (my_n)=((my_mknode)((my_c),(my_N_FUNCTYPE),((struct my_node*)0UL),((struct my_node*)0UL))); + (my_copypos)((my_n),(my_pn)); + (my_pn)=((my_pn)->my_child); + (my_link)=(&((my_n)->my_a)); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_arg_decl)))) { + (my_a)=((my_mknode1)((my_c),(my_N_ARGLIST),((my_reconstruct_arg_decl)((my_c),(my_pn))))); + (my_copypos)((my_a),(my_pn)); + (*(my_link))=(my_a); + (my_link)=(&((my_a)->my_b)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_type)))) { + ((my_n)->my_b)=((my_reconstruct_type)((my_c),(my_pn))); + } else { + (my_die)(((unsigned char *)"invalid func_type")); + } + (my_pn)=((my_pn)->my_next); + } + return my_n; +} +struct my_node*my_reconstruct_goto(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_goto_stmt)))),((unsigned char *)"goto_stmt")); + (my_a)=((my_reconstruct_ident)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode1)((my_c),(my_N_GOTO),(my_a))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_hex(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + unsigned long my_x = 0; + struct my_node* my_n = 0; + unsigned long my_ok = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_hex)))),((unsigned char *)"hex")); + (my_x)=((my_hex2int)((&(((my_pn)->my_str)[2UL])),((unsigned long )(((unsigned long)((my_pn)->my_len))-((unsigned long)(2UL)))),(&(my_ok)))); + if ((unsigned long)(!(my_ok))) { + (my_die)(((unsigned char *)"invalid hex")); + } + (my_n)=((my_mknode0)((my_c),(my_N_NUM))); + (my_copypos)((my_n),(my_pn)); + ((my_n)->my_n)=(my_x); + return my_n; +} +struct my_node*my_reconstruct_ident(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_ident)))),((unsigned char *)"ident")); + return (my_reconstruct_intern)((my_c),(my_pn),((my_pn)->my_str),((my_pn)->my_len)); +} +struct my_node*my_reconstruct_if(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node** my_link = 0; + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_if_stmt)))),((unsigned char *)"if_stmt")); + (my_a)=((my_reconstruct_expr)((my_c),(((my_pn)->my_child)->my_next))); + (my_b)=((my_reconstruct_compound)((my_c),((((my_pn)->my_child)->my_next)->my_next))); + (my_ret)=((my_mknode1)((my_c),(my_N_CONDLIST),((my_mknode)((my_c),(my_N_COND),(my_a),(my_b))))); + (my_copypos)((my_ret),(my_pn)); + (my_copypos)(((my_ret)->my_a),(my_pn)); + (my_link)=(&((my_ret)->my_b)); + (my_pn)=(((((my_pn)->my_child)->my_next)->my_next)->my_next); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_elif_stmt)))) { + (my_a)=((my_reconstruct_expr)((my_c),((((my_pn)->my_child)->my_next)->my_next))); + (my_b)=((my_reconstruct_compound)((my_c),(((((my_pn)->my_child)->my_next)->my_next)->my_next))); + (my_n)=((my_mknode1)((my_c),(my_N_CONDLIST),((my_mknode)((my_c),(my_N_COND),(my_a),(my_b))))); + (my_copypos)((my_n),(my_pn)); + (my_copypos)(((my_n)->my_a),(my_pn)); + (*(my_link))=(my_n); + (my_link)=(&((my_n)->my_b)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_else_stmt)))) { + (my_a)=((struct my_node*)0UL); + (my_b)=((my_reconstruct_compound)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode1)((my_c),(my_N_CONDLIST),((my_mknode)((my_c),(my_N_COND),(my_a),(my_b))))); + (my_copypos)((my_n),(my_pn)); + (my_copypos)(((my_n)->my_a),(my_pn)); + (*(my_link))=(my_n); + (my_link)=(&((my_n)->my_b)); + break; + } else { + (my_die)(((unsigned char *)"invalid if_stmt")); + } + (my_pn)=((my_pn)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_intern(struct my_parser* my_c, struct my_peg_node* my_pn, unsigned char * my_s, unsigned long my_len) +{ + struct my_node* my_n = 0; + unsigned long my_i = 0; + (my_n)=((my_mknode0)((my_c),(my_N_IDENT))); + (my_copypos)((my_n),(my_pn)); + (my_i)=(0UL); + ((my_n)->my_s)=((my_alloc)(((my_c)->my_a),((unsigned long )(((unsigned long)(my_len))+((unsigned long)(1UL)))))); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; + } + (((my_n)->my_s)[my_i])=((my_s)[my_i]); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (((my_n)->my_s)[my_i])=((unsigned char )0UL); + return my_n; +} +struct my_node*my_reconstruct_label(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_label_stmt)))),((unsigned char *)"label_stmt")); + (my_a)=((my_reconstruct_ident)((my_c),((my_pn)->my_child))); + (my_n)=((my_mknode1)((my_c),(my_N_LABEL),(my_a))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_loop(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + struct my_node* my_a = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_loop_stmt)))),((unsigned char *)"loop_stmt")); + (my_a)=((my_reconstruct_compound)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode1)((my_c),(my_N_LOOP),(my_a))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_member_decl(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_member_decl)))),((unsigned char *)"member_decl")); + (my_a)=((my_reconstruct_ident)((my_c),((my_pn)->my_child))); + (my_b)=((my_reconstruct_type)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode)((my_c),(my_N_MEMBERDECL),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_member_list(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + struct my_node* my_a = 0; + struct my_node* my_ret = 0; + struct my_node** my_link = 0; + (my_ret)=((struct my_node*)0UL); + (my_link)=(&(my_ret)); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + (my_a)=((my_reconstruct_member_decl)((my_c),(my_pn))); + (my_n)=((my_mknode1)((my_c),(my_N_MEMBERLIST),(my_a))); + (my_copypos)((my_n),(my_pn)); + (*(my_link))=(my_n); + (my_link)=(&((my_n)->my_b)); + (my_pn)=((my_pn)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_mul(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node* my_n = 0; + struct my_node** my_link = 0; + unsigned long my_kind = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_mul_expr)))),((unsigned char *)"mul_expr")); + (my_ret)=((my_reconstruct_shift)((my_c),((my_pn)->my_child))); + (my_link)=(&(my_ret)); + (my_pn)=(((my_pn)->my_child)->my_next); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_mul_op)))) { + (my_kind)=(my_N_MUL); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_div_op)))) { + (my_kind)=(my_N_DIV); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_mod_op)))) { + (my_kind)=(my_N_MOD); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_and_op)))) { + (my_kind)=(my_N_AND); + } else { + (my_die)(((unsigned char *)"invalid mulop")); + } + (my_n)=((my_reconstruct_shift)((my_c),((my_pn)->my_next))); + (*(my_link))=((my_mknode)((my_c),(my_kind),(*(my_link)),(my_n))); + (my_copypos)((*(my_link)),(my_pn)); + (my_pn)=(((my_pn)->my_next)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_post(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node* my_n = 0; + unsigned long my_tag = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_post_expr)))),((unsigned char *)"post_expr")); + (my_ret)=((my_reconstruct_primary)((my_c),((my_pn)->my_child))); + (my_pn)=(((my_pn)->my_child)->my_next); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + (my_tag)=((my_pn)->my_tag); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_index_expr)))) { + (my_n)=((my_reconstruct_expr)((my_c),((my_pn)->my_child))); + (my_ret)=((my_mknode)((my_c),(my_N_INDEX),(my_ret),(my_n))); + (my_copypos)((my_ret),(my_pn)); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_call_expr)))) { + (my_n)=((my_reconstruct_args)((my_c),((my_pn)->my_child))); + (my_ret)=((my_mknode)((my_c),(my_N_CALL),(my_ret),(my_n))); + (my_copypos)((my_ret),(my_pn)); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_expr)))) { + (my_n)=((my_reconstruct_ident)((my_c),((my_pn)->my_child))); + (my_ret)=((my_mknode)((my_c),(my_N_DOT),(my_ret),(my_n))); + (my_copypos)((my_ret),(my_pn)); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_cast_expr)))) { + (my_n)=((my_reconstruct_type)((my_c),((my_pn)->my_child))); + (my_ret)=((my_mknode)((my_c),(my_N_CAST),(my_ret),(my_n))); + (my_copypos)((my_ret),(my_pn)); + } else { + (my_die)(((unsigned char *)"invalid post_expr")); + } + (my_pn)=((my_pn)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_primary(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_primary)))),((unsigned char *)"primary")); + (my_pn)=((my_pn)->my_child); + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_ident)))) { + return (my_reconstruct_ident)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_hex)))) { + return (my_reconstruct_hex)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_dec)))) { + return (my_reconstruct_dec)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_str)))) { + return (my_reconstruct_str)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_char)))) { + return (my_reconstruct_char)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_sizeof_expr)))) { + return (my_reconstruct_sizeof)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_expr)))) { + return (my_reconstruct_expr)((my_c),(my_pn)); + } else { + (my_die)(((unsigned char *)"invalid primary")); + } +} +struct my_node*my_reconstruct_return(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_return_stmt)))),((unsigned char *)"return_stmt")); + (my_a)=((struct my_node*)0UL); + if (((my_pn)->my_child)->my_next) { + (my_a)=((my_reconstruct_expr)((my_c),(((my_pn)->my_child)->my_next))); + } + (my_n)=((my_mknode1)((my_c),(my_N_RETURN),(my_a))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_shift(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_ret = 0; + struct my_node* my_n = 0; + struct my_node** my_link = 0; + unsigned long my_kind = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_shift_expr)))),((unsigned char *)"shift_expr")); + (my_ret)=((my_reconstruct_unary)((my_c),((my_pn)->my_child))); + (my_link)=(&(my_ret)); + (my_pn)=(((my_pn)->my_child)->my_next); + while (1) { + if ((unsigned long)(!(my_pn))) { + break; + } + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_lsh_op)))) { + (my_kind)=(my_N_LSH); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_rsh_op)))) { + (my_kind)=(my_N_RSH); + } else { + (my_die)(((unsigned char *)"invalid shift")); + } + (my_n)=((my_reconstruct_unary)((my_c),((my_pn)->my_next))); + (*(my_link))=((my_mknode)((my_c),(my_kind),(*(my_link)),(my_n))); + (my_copypos)((*(my_link)),(my_pn)); + (my_pn)=(((my_pn)->my_next)->my_next); + } + return my_ret; +} +struct my_node*my_reconstruct_sizeof(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + struct my_node* my_a = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_sizeof_expr)))),((unsigned char *)"sizeof_expr")); + (my_a)=((my_reconstruct_expr)((my_c),(((my_pn)->my_child)->my_next))); + (my_n)=((my_mknode1)((my_c),(my_N_SIZEOF),(my_a))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_stmt(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_stmt)))),((unsigned char *)"stmt")); + (my_pn)=((my_pn)->my_child); + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_if_stmt)))) { + return (my_reconstruct_if)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_loop_stmt)))) { + return (my_reconstruct_loop)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_break_stmt)))) { + return (my_reconstruct_break)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_continue_stmt)))) { + return (my_reconstruct_continue)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_return_stmt)))) { + return (my_reconstruct_return)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_var_stmt)))) { + return (my_reconstruct_var)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_label_stmt)))) { + return (my_reconstruct_label)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_goto_stmt)))) { + return (my_reconstruct_goto)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_assign_stmt)))) { + return (my_reconstruct_assign)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_expr_stmt)))) { + return (my_reconstruct_expr_stmt)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_empty_stmt)))) { + return (my_reconstruct_empty)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_compound_stmt)))) { + return (my_reconstruct_compound)((my_c),(my_pn)); + } else { + (my_die)(((unsigned char *)"invalid stmt")); + } +} +struct my_node*my_reconstruct_str(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + unsigned long my_i = 0; + unsigned long my_j = 0; + unsigned long my_len = 0; + unsigned long my_ch = 0; + unsigned long my_ok = 0; + unsigned char * my_s = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_str)))),((unsigned char *)"str")); + (my_s)=((my_alloc)(((my_c)->my_a),((my_pn)->my_len))); + (my_i)=(1UL); + (my_j)=(0UL); + (my_len)=((unsigned long )(((unsigned long)((my_pn)->my_len))-((unsigned long)(1UL)))); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; + } + (my_ch)=((my_unescape)(((my_pn)->my_str),(&(my_i)),(my_len),(&(my_ok)))); + if ((unsigned long)(!(my_ok))) { + (my_die)(((unsigned char *)"invalid escape")); + } + ((my_s)[my_j])=((unsigned char )my_ch); + (my_j)=((unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))); + } + ((my_s)[my_j])=((unsigned char )0UL); + (my_n)=((my_mknode0)((my_c),(my_N_STR))); + (my_copypos)((my_n),(my_pn)); + ((my_n)->my_s)=(my_s); + return my_n; +} +struct my_node*my_reconstruct_struct(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + struct my_node* my_a = 0; + struct my_node* my_b = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_struct_decl)))),((unsigned char *)"struct_def")); + (my_a)=((my_reconstruct_ident)((my_c),(((my_pn)->my_child)->my_next))); + (my_b)=((my_reconstruct_member_list)((my_c),((((my_pn)->my_child)->my_next)->my_next))); + (my_n)=((my_mknode)((my_c),(my_N_STRUCT),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +struct my_node*my_reconstruct_type(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_type)))),((unsigned char *)"type")); + (my_pn)=((my_pn)->my_child); + if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_ident)))) { + return (my_reconstruct_ident)((my_c),(my_pn)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_byte)))) { + return (my_reconstruct_intern)((my_c),(my_pn),((unsigned char *)"byte"),(4UL)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_int)))) { + return (my_reconstruct_intern)((my_c),(my_pn),((unsigned char *)"int"),(3UL)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_void)))) { + return (my_reconstruct_intern)((my_c),(my_pn),((unsigned char *)"void"),(4UL)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_ptr_type)))) { + (my_n)=((my_mknode1)((my_c),(my_N_PTRTYPE),((my_reconstruct_type)((my_c),((my_pn)->my_child))))); + (my_copypos)((my_n),(my_pn)); + return my_n; + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_func)))) { + return (my_reconstruct_func_type)((my_c),((my_pn)->my_next)); + } else if ((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_type)))) { + return (my_reconstruct_type)((my_c),(my_pn)); + } else { + (my_die)(((unsigned char *)"reconstruct_type: invalid type")); + } +} +struct my_node*my_reconstruct_unary(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_n = 0; + struct my_node* my_ret = 0; + struct my_node** my_link = 0; + unsigned long my_tag = 0; + unsigned long my_kind = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_unary_expr)))),((unsigned char *)"unary_expr")); + (my_link)=(&(my_ret)); + (my_pn)=((my_pn)->my_child); + while (1) { + (my_tag)=((my_pn)->my_tag); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ref_op)))) { + (my_kind)=(my_N_REF); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_deref_op)))) { + (my_kind)=(my_N_DEREF); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_pos_op)))) { + (my_kind)=(my_N_POS); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_neg_op)))) { + (my_kind)=(my_N_NEG); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_not_op)))) { + (my_kind)=(my_N_NOT); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_bnot_op)))) { + (my_kind)=(my_N_BNOT); + } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_post_expr)))) { + (*(my_link))=((my_reconstruct_post)((my_c),(my_pn))); + return my_ret; + } else { + (my_die)(((unsigned char *)"invalid unary_expr")); + } + (my_n)=((my_mknode0)((my_c),(my_kind))); + (my_copypos)((my_n),(my_pn)); + (*(my_link))=(my_n); + (my_link)=(&((my_n)->my_a)); + (my_pn)=((my_pn)->my_next); + } +} +struct my_node*my_reconstruct_var(struct my_parser* my_c, struct my_peg_node* my_pn) +{ + struct my_node* my_a = 0; + struct my_node* my_b = 0; + struct my_node* my_n = 0; + (my_assert)(((unsigned long)(((long)((my_pn)->my_tag))==((long)(my_P_var_stmt)))),((unsigned char *)"var_stmt")); + (my_a)=((my_reconstruct_ident)((my_c),(((my_pn)->my_child)->my_next))); + (my_b)=((my_reconstruct_type)((my_c),((((my_pn)->my_child)->my_next)->my_next))); + (my_n)=((my_mknode)((my_c),(my_N_VARDECL),(my_a),(my_b))); + (my_copypos)((my_n),(my_pn)); + return my_n; +} +unsigned long my_rename(unsigned char * my_oldname, unsigned char * my_newname) +{ + return (my_syscall)((82UL),((unsigned long )my_oldname),((unsigned long )my_newname),(0UL),(0UL),(0UL),(0UL)); +} +void my_reserve(struct my_assembler* my_c, unsigned long my_n) +{ + unsigned char * my_m = 0; + struct my_chunk* my_b = 0; + if ((unsigned long)(((my_c)->my_text_end)&&((unsigned long)(((long)((unsigned long )(((unsigned long)(((my_c)->my_text_end)->my_cap))-((unsigned long)(((my_c)->my_text_end)->my_fill)))))>=((long)(my_n)))))) { + return; + } + if ((unsigned long)(((long)(my_n))<((long)(4096UL)))) { + (my_n)=(4096UL); + } + (my_m)=((my_alloc)(((my_c)->my_a),(my_n))); + (my_b)=((struct my_chunk*)(my_alloc)(((my_c)->my_a),(32UL))); + ((my_b)->my_buf)=(my_m); + ((my_b)->my_fill)=(0UL); + ((my_b)->my_cap)=(my_n); + ((my_b)->my_next)=((struct my_chunk*)0UL); + if ((my_c)->my_text_end) { + (((my_c)->my_text_end)->my_next)=(my_b); + ((my_c)->my_text_end)=(my_b); + } else { + ((my_c)->my_text)=(my_b); + ((my_c)->my_text_end)=(my_b); + } +} +void my_reverse(unsigned char * my_buf, unsigned long my_len) +{ + unsigned long my_i = 0; + unsigned char my_x = 0; + (my_i)=(0UL); + (my_len)=((unsigned long )(((unsigned long)(my_len))-((unsigned long)(1UL)))); + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_len)))) { + break; + } + (my_x)=((my_buf)[my_i]); + ((my_buf)[my_i])=((my_buf)[my_len]); + ((my_buf)[my_len])=(my_x); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_len)=((unsigned long )(((unsigned long)(my_len))-((unsigned long)(1UL)))); + } +} +void my_setup_alloc(struct my_alloc* my_c) +{ + ((my_c)->my_page)=((struct my_page*)0UL); +} +struct my_assembler*my_setup_assembler(struct my_alloc* my_a) +{ + struct my_assembler* my_c = 0; + (my_c)=((struct my_assembler*)(my_alloc)((my_a),(48UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_out)=((struct my_file*)0UL); + ((my_c)->my_at)=(0UL); + ((my_c)->my_text)=((struct my_chunk*)0UL); + ((my_c)->my_text_end)=((struct my_chunk*)0UL); + ((my_c)->my_bits32)=(0UL); + return my_c; +} +struct my_parser*my_setup_parser(struct my_alloc* my_a) +{ + struct my_parser* my_c = 0; + (my_c)=((struct my_parser*)(my_alloc)((my_a),(16UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_p)=((my_peg_new)(((unsigned char *)""),((unsigned char *)""),(0UL),(my_a))); + return my_c; +} +void my_show_node(struct my_file* my_out, struct my_node* my_n) +{ + unsigned long my_i = 0; + unsigned long my_ch = 0; + unsigned char * my_hex = 0; + (my_hex)=((unsigned char *)"0123456789abcdef"); + if ((unsigned long)(!(my_n))) { + return; + } + (my_fputc)((my_out),(40)); + (my_fputs)((my_out),((my_node_to_str)(((my_n)->my_kind)))); + if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NUM)))) { + (my_fputc)((my_out),(32)); + (my_fputd)((my_out),((my_n)->my_n)); + } + if ((my_n)->my_s) { + (my_fputc)((my_out),(32)); + (my_fputc)((my_out),(34)); + (my_i)=(0UL); + while (1) { + (my_ch)=((unsigned long )((my_n)->my_s)[my_i]); + if ((unsigned long)(!(my_ch))) { + break; + } + if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { + (my_fputc)((my_out),(92)); + (my_fputc)((my_out),(120)); + (my_fputc)((my_out),((unsigned long )(my_hex)[(unsigned long )(((unsigned long)(my_ch))>>((unsigned long)(4UL)))])); + (my_fputc)((my_out),((unsigned long )(my_hex)[(unsigned long )(((unsigned long)(my_ch))&((unsigned long)(15UL)))])); + } else { + (my_fputc)((my_out),(my_ch)); + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_fputc)((my_out),(34)); + } + if ((my_n)->my_a) { + (my_fputc)((my_out),(32)); + (my_show_node)((my_out),((my_n)->my_a)); + } + if ((my_n)->my_b) { + (my_fputc)((my_out),(32)); + (my_show_node)((my_out),((my_n)->my_b)); + } + (my_fputc)((my_out),(41)); +} +unsigned long my_sigaction(unsigned long my_sig, struct my_sigaction* my_act, struct my_sigaction* my_oact) +{ + return (my_syscall)((13UL),(my_sig),((unsigned long )my_act),((unsigned long )my_oact),(8UL),(0UL),(0UL)); +} +unsigned long my_socket(unsigned long my_pf, unsigned long my_ty, unsigned long my_pc) +{ + return (my_syscall)((41UL),(my_pf),(my_ty),(my_pc),(0UL),(0UL),(0UL)); +} +unsigned long my_strcmp(unsigned char * my_a, unsigned char * my_b) +{ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)((my_a)[my_i]))>((long)((my_b)[my_i])))) { + return 1UL; + } + if ((unsigned long)(((long)((my_a)[my_i]))<((long)((my_b)[my_i])))) { + return (unsigned long )(-(unsigned long)(1UL)); + } + if ((unsigned long)(((long)((my_a)[my_i]))==((long)((unsigned char )0UL)))) { + return 0UL; + } + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +unsigned long my_strlen(unsigned char * my_s) +{ + unsigned long my_ret = 0; + (my_ret)=(0UL); + while (1) { + if ((unsigned long)(((long)((my_s)[my_ret]))==((long)((unsigned char )0UL)))) { + return my_ret; + } + (my_ret)=((unsigned long )(((unsigned long)(my_ret))+((unsigned long)(1UL)))); + } +} +unsigned char *my_tag_to_str(unsigned long my_tag) +{ + if ((unsigned long)(((long)(my_tag))==((long)(my_P_grammar)))) { + return (unsigned char *)"grammar"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum_item)))) { + return (unsigned char *)"enum_item"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum_decl)))) { + return (unsigned char *)"enum_decl"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_decl)))) { + return (unsigned char *)"member_decl"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_struct_decl)))) { + return (unsigned char *)"struct_decl"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_func_decl)))) { + return (unsigned char *)"func_decl"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_type)))) { + return (unsigned char *)"type"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ptr_type)))) { + return (unsigned char *)"ptr_type"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_arg_decl)))) { + return (unsigned char *)"arg_decl"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_func_type)))) { + return (unsigned char *)"func_type"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_stmt)))) { + return (unsigned char *)"stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_elif_stmt)))) { + return (unsigned char *)"elif_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_else_stmt)))) { + return (unsigned char *)"else_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_if_stmt)))) { + return (unsigned char *)"if_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_loop_stmt)))) { + return (unsigned char *)"loop_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_break_stmt)))) { + return (unsigned char *)"break_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_continue_stmt)))) { + return (unsigned char *)"continue_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_return_stmt)))) { + return (unsigned char *)"return_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_var_stmt)))) { + return (unsigned char *)"var_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_label_stmt)))) { + return (unsigned char *)"label_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_goto_stmt)))) { + return (unsigned char *)"goto_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_assign_stmt)))) { + return (unsigned char *)"assign_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_expr_stmt)))) { + return (unsigned char *)"expr_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_empty_stmt)))) { + return (unsigned char *)"empty_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_compound_stmt)))) { + return (unsigned char *)"compound_stmt"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_expr)))) { + return (unsigned char *)"expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_band_op)))) { + return (unsigned char *)"band_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_bor_op)))) { + return (unsigned char *)"bor_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_bool_expr)))) { + return (unsigned char *)"bool_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_le_op)))) { + return (unsigned char *)"le_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ge_op)))) { + return (unsigned char *)"ge_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_lt_op)))) { + return (unsigned char *)"lt_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_gt_op)))) { + return (unsigned char *)"gt_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_eq_op)))) { + return (unsigned char *)"eq_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ne_op)))) { + return (unsigned char *)"ne_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_comp_expr)))) { + return (unsigned char *)"comp_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_add_op)))) { + return (unsigned char *)"add_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sub_op)))) { + return (unsigned char *)"sub_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_or_op)))) { + return (unsigned char *)"or_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_xor_op)))) { + return (unsigned char *)"xor_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_add_expr)))) { + return (unsigned char *)"add_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_mul_op)))) { + return (unsigned char *)"mul_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_div_op)))) { + return (unsigned char *)"div_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_mod_op)))) { + return (unsigned char *)"mod_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_and_op)))) { + return (unsigned char *)"and_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_mul_expr)))) { + return (unsigned char *)"mul_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_lsh_op)))) { + return (unsigned char *)"lsh_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_rsh_op)))) { + return (unsigned char *)"rsh_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_shift_expr)))) { + return (unsigned char *)"shift_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ref_op)))) { + return (unsigned char *)"ref_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_deref_op)))) { + return (unsigned char *)"deref_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_pos_op)))) { + return (unsigned char *)"pos_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_neg_op)))) { + return (unsigned char *)"neg_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_not_op)))) { + return (unsigned char *)"not_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_bnot_op)))) { + return (unsigned char *)"bnot_op"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_unary_expr)))) { + return (unsigned char *)"unary_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_index_expr)))) { + return (unsigned char *)"index_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_call_expr)))) { + return (unsigned char *)"call_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_expr)))) { + return (unsigned char *)"member_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_cast_expr)))) { + return (unsigned char *)"cast_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_post_expr)))) { + return (unsigned char *)"post_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_primary)))) { + return (unsigned char *)"primary"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sizeof_expr)))) { + return (unsigned char *)"sizeof_expr"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_hex)))) { + return (unsigned char *)"hex"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_dec)))) { + return (unsigned char *)"dec"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_str)))) { + return (unsigned char *)"str"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_char)))) { + return (unsigned char *)"char"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_reserved)))) { + return (unsigned char *)"reserved"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_return)))) { + return (unsigned char *)"return"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_break)))) { + return (unsigned char *)"break"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sizeof)))) { + return (unsigned char *)"sizeof"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_if)))) { + return (unsigned char *)"if"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_else)))) { + return (unsigned char *)"else"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_loop)))) { + return (unsigned char *)"loop"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_continue)))) { + return (unsigned char *)"continue"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_goto)))) { + return (unsigned char *)"goto"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_var)))) { + return (unsigned char *)"var"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum)))) { + return (unsigned char *)"enum"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_struct)))) { + return (unsigned char *)"struct"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_byte)))) { + return (unsigned char *)"byte"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_int)))) { + return (unsigned char *)"int"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_void)))) { + return (unsigned char *)"void"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_func)))) { + return (unsigned char *)"func"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ident)))) { + return (unsigned char *)"ident"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sp)))) { + return (unsigned char *)"sp"; + } + (my_die)(((unsigned char *)"invalid tag")); +} +unsigned long my_type_isint(struct my_type* my_t) +{ + return (unsigned long)(((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_INT))))||((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE))))); +} +unsigned long my_type_isprim(struct my_type* my_t) +{ + return (unsigned long)(((unsigned long)(((long)((my_t)->my_kind))!=((long)(my_TY_VOID))))&&((unsigned long)(((long)((my_t)->my_kind))!=((long)(my_TY_STRUCT))))); +} +unsigned long my_type_sizeof(struct my_compiler* my_c, struct my_type* my_t) +{ + unsigned long my_kind = 0; + (my_kind)=((my_t)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_TY_INT)))) { + return 8UL; + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_BYTE)))) { + return 8UL; + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_PTR)))) { + return 8UL; + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_FUNC)))) { + return 8UL; + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_STRUCT)))) { + (my_layout_struct)((my_c),((my_t)->my_st)); + return ((my_t)->my_st)->my_struct_size; + } else { + (my_cdie)((my_c),((unsigned char *)"sizeof: invalid type")); + } +} +unsigned long my_unescape(unsigned char * my_s, unsigned long * my_i, unsigned long my_len, unsigned long * my_ok) +{ + unsigned long my_ch = 0; + unsigned long my_hex = 0; + (*(my_ok))=(1UL); + if ((unsigned long)(((long)(*(my_i)))>=((long)(my_len)))) { + (*(my_ok))=(0UL); + return 0UL; + } + (my_ch)=((unsigned long )(my_s)[*(my_i)]); + (*(my_i))=((unsigned long )(((unsigned long)(*(my_i)))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))!=((long)(92)))) { + return my_ch; + } + if ((unsigned long)(((long)(*(my_i)))>=((long)(my_len)))) { + (*(my_ok))=(0UL); + return 0UL; + } + (my_ch)=((unsigned long )(my_s)[*(my_i)]); + (*(my_i))=((unsigned long )(((unsigned long)(*(my_i)))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(116)))) { + return 9; + } else if ((unsigned long)(((long)(my_ch))==((long)(114)))) { + return 13; + } else if ((unsigned long)(((long)(my_ch))==((long)(110)))) { + return 10; + } else if ((unsigned long)(((long)(my_ch))==((long)(92)))) { + return 92; + } else if ((unsigned long)(((long)(my_ch))==((long)(39)))) { + return 39; + } else if ((unsigned long)(((long)(my_ch))==((long)(34)))) { + return 34; + } else if ((unsigned long)(((long)(my_ch))==((long)(120)))) { + if ((unsigned long)(((long)(*(my_i)))>=((long)(my_len)))) { + (*(my_ok))=(0UL); + return 0UL; + } + (my_ch)=((unsigned long )(my_s)[*(my_i)]); + (*(my_i))=((unsigned long )(((unsigned long)(*(my_i)))+((unsigned long)(1UL)))); + (my_hex)=((unsigned long )(((long)((my_hexdig)((my_ch),(my_ok))))*((long)(16UL)))); + if ((unsigned long)(!(*(my_ok)))) { + return 0UL; + } + if ((unsigned long)(((long)(*(my_i)))>=((long)(my_len)))) { + (*(my_ok))=(0UL); + return 0UL; + } + (my_ch)=((unsigned long )(my_s)[*(my_i)]); + (*(my_i))=((unsigned long )(((unsigned long)(*(my_i)))+((unsigned long)(1UL)))); + (my_hex)=((unsigned long )(((unsigned long)(my_hex))|((unsigned long)((my_hexdig)((my_ch),(my_ok)))))); + if ((unsigned long)(!(*(my_ok)))) { + return 0UL; + } + return my_hex; + } else { + (*(my_ok))=(0UL); + return 0UL; + } +} +unsigned long my_unhex(unsigned char * my_dest, unsigned char * my_src) +{ + unsigned long my_i = 0; + unsigned long my_dlen = 0; + unsigned long my_x = 0; + unsigned long my_y = 0; + (my_i)=(0UL); + (my_dlen)=(0UL); + while (1) { + (my_x)=((unsigned long )(my_src)[my_i]); + if ((unsigned long)(((long)(my_x))==((long)(0UL)))) { + break; + } + if ((unsigned long)(((unsigned long)(((long)(my_x))==((long)(32))))||((unsigned long)(((unsigned long)(((long)(my_x))==((long)(9))))||((unsigned long)(((unsigned long)(((long)(my_x))==((long)(13))))||((unsigned long)(((long)(my_x))==((long)(10)))))))))) { + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; + } + if ((unsigned long)(((unsigned long)(((long)(my_x))>=((long)(48))))&&((unsigned long)(((long)(my_x))<=((long)(57)))))) { + (my_x)=((unsigned long )(((unsigned long)(my_x))-((unsigned long)(48)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_x))>=((long)(97))))&&((unsigned long)(((long)(my_x))<=((long)(102)))))) { + (my_x)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_x))-((unsigned long)(97)))))+((unsigned long)(10UL)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_x))>=((long)(65))))&&((unsigned long)(((long)(my_x))<=((long)(70)))))) { + (my_x)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_x))-((unsigned long)(65)))))+((unsigned long)(10UL)))); + } else { + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; + } + (my_y)=((unsigned long )(my_src)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))]); + if ((unsigned long)(((long)(my_y))==((long)(0UL)))) { + break; + } + if ((unsigned long)(((unsigned long)(((long)(my_y))>=((long)(48))))&&((unsigned long)(((long)(my_y))<=((long)(57)))))) { + (my_y)=((unsigned long )(((unsigned long)(my_y))-((unsigned long)(48)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_y))>=((long)(97))))&&((unsigned long)(((long)(my_y))<=((long)(102)))))) { + (my_y)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_y))-((unsigned long)(97)))))+((unsigned long)(10UL)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_y))>=((long)(65))))&&((unsigned long)(((long)(my_y))<=((long)(70)))))) { + (my_y)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_y))-((unsigned long)(65)))))+((unsigned long)(10UL)))); + } else { + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; + } + ((my_dest)[my_dlen])=((unsigned char )(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_x))<<((unsigned long)(4UL)))))|((unsigned long)(my_y)))); + (my_dlen)=((unsigned long )(((unsigned long)(my_dlen))+((unsigned long)(1UL)))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(2UL)))); + } + return my_dlen; +} +void my_unify(struct my_compiler* my_c, struct my_type* my_a, struct my_type* my_b) +{ + unsigned long my_kind = 0; + if ((unsigned long)(((long)(my_a))==((long)(my_b)))) { + return; + } + if ((unsigned long)(((unsigned long)((my_a)&&((unsigned long)(!(my_b)))))||((unsigned long)(((unsigned long)((my_b)&&((unsigned long)(!(my_a)))))||((unsigned long)(((long)((my_a)->my_kind))!=((long)((my_b)->my_kind)))))))) { + (my_cdie)((my_c),((unsigned char *)"type error")); + } + (my_kind)=((my_a)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_TY_PTR)))) { + (my_unify)((my_c),((my_a)->my_val),((my_b)->my_val)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_FUNC)))) { + (my_unify)((my_c),((my_a)->my_val),((my_b)->my_val)); + (my_unify)((my_c),((my_a)->my_arg),((my_b)->my_arg)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_ARG)))) { + (my_unify)((my_c),((my_a)->my_val),((my_b)->my_val)); + (my_unify)((my_c),((my_a)->my_arg),((my_b)->my_arg)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_TY_STRUCT)))) { + if ((unsigned long)(((long)((my_a)->my_st))!=((long)((my_b)->my_st)))) { + (my_cdie)((my_c),((unsigned char *)"type error")); + } + } else if ((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_VOID))))&&((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_TY_INT))))&&((unsigned long)(((long)(my_kind))!=((long)(my_TY_BYTE)))))))) { + (my_cdie)((my_c),((unsigned char *)"unify: invalid type")); + } +} +unsigned long my_unlink(unsigned char * my_name) +{ + return (my_syscall)((87UL),((unsigned long )my_name),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +unsigned long my_wait(unsigned long my_pid, unsigned long * my_status, unsigned long my_flags) +{ + unsigned long my_s = 0; + unsigned long my_ret = 0; + (my_s)=(0UL); + (my_ret)=((my_syscall)((61UL),(my_pid),((unsigned long )my_s),(my_flags),(0UL),(0UL),(0UL))); + if (my_status) { + (*(my_status))=((unsigned long )(((unsigned long)(my_s))&((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(-(unsigned long)(1UL))))>>((unsigned long)(32UL))))))); + } + return my_ret; +} +unsigned long my_write(unsigned long my_fd, unsigned char * my_buf, unsigned long my_n) +{ + return (my_syscall)((1UL),(my_fd),((unsigned long )my_buf),(my_n),(0UL),(0UL),(0UL)); +} +void my_writeout(struct my_assembler* my_c, struct my_label* my_start, struct my_label* my_kstart) +{ + struct my_chunk* my_b = 0; + unsigned long my_i = 0; + unsigned long my_text_size = 0; + unsigned long my_text_end = 0; + unsigned long my_load_addr = 0; + unsigned long my_entry = 0; + unsigned long my_kentry = 0; + unsigned long my_mb_magic = 0; + unsigned long my_mb_flags = 0; + unsigned long my_mb_checksum = 0; + unsigned long my_mb_addr = 0; + if ((unsigned long)(!((my_c)->my_out))) { + (my_die)(((unsigned char *)"output not opened")); + } + (my_load_addr)=(1048576UL); + (my_text_size)=((my_c)->my_at); + if ((unsigned long)(((unsigned long)(!(my_start)))||((unsigned long)(!((my_start)->my_fixed))))) { + (my_die)(((unsigned char *)"_start is not defined")); + } + (my_entry)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_load_addr))+((unsigned long)((my_start)->my_at)))))+((unsigned long)(128UL)))))+((unsigned long)(32UL)))); + (my_text_size)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_text_size))+((unsigned long)(128UL)))))+((unsigned long)(32UL)))); + (my_text_end)=((unsigned long )(((unsigned long)(my_load_addr))+((unsigned long)(my_text_size)))); + (my_mb_magic)=(464367618UL); + (my_mb_flags)=(65539UL); + (my_mb_checksum)=((unsigned long )(-(unsigned long)((unsigned long )(((unsigned long)(my_mb_magic))+((unsigned long)(my_mb_flags)))))); + (my_mb_addr)=((unsigned long )(((unsigned long)(my_load_addr))+((unsigned long)(120UL)))); + if ((unsigned long)((my_kstart)&&((my_kstart)->my_fixed))) { + (my_kentry)=((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_load_addr))+((unsigned long)((my_kstart)->my_at)))))+((unsigned long)(128UL)))))+((unsigned long)(32UL)))); + } else { + (my_mb_magic)=(0UL); + (my_kentry)=(0UL); + } + (my_putchar)((my_c),(127UL)); + (my_putchar)((my_c),(69)); + (my_putchar)((my_c),(76)); + (my_putchar)((my_c),(70)); + (my_putchar)((my_c),(2UL)); + (my_putchar)((my_c),(1UL)); + (my_putchar)((my_c),(1UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(2UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(62UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(1UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(my_entry)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_entry))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_entry))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_entry))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(64UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(64UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(56UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(1UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(64UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(1UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(5UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(16UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(my_text_size)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_size))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_size))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_size))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(my_text_size)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_size))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_size))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_size))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(my_mb_magic)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_magic))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_magic))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_magic))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(my_mb_flags)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_flags))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_flags))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_flags))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(my_mb_checksum)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_checksum))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_checksum))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_checksum))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(my_mb_addr)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_addr))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_addr))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_mb_addr))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(my_load_addr)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_load_addr))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_load_addr))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_load_addr))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(my_text_end)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_end))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_end))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_text_end))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(0UL)); + (my_putchar)((my_c),(my_kentry)); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_kentry))>>((unsigned long)(8UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_kentry))>>((unsigned long)(16UL))))); + (my_putchar)((my_c),((unsigned long )(((unsigned long)(my_kentry))>>((unsigned long)(24UL))))); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_putchar)((my_c),(my_OP_NOP)); + (my_b)=((my_c)->my_text); + while (1) { + if ((unsigned long)(!(my_b))) { + break; + } + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)((my_b)->my_fill)))) { + break; + } + (my_putchar)((my_c),((unsigned long )((my_b)->my_buf)[my_i])); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_b)=((my_b)->my_next); + } + (my_fflush)(((my_c)->my_out)); +} +void my_xxd_line(unsigned char * my_line, unsigned long my_offset, unsigned char * my_data, unsigned long my_len) +{ + unsigned long my_i = 0; + unsigned long my_j = 0; + unsigned char * my_d = 0; + (my_d)=((unsigned char *)"0123456789abcdef"); + (my_i)=(0UL); + ((my_line)[my_i])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(28UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(24UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(2UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(20UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(3UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(16UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(4UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(12UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(5UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(8UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(6UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)(my_offset))>>((unsigned long)(4UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(7UL)))])=((my_d)[(unsigned long )(((unsigned long)(my_offset))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(8UL)))])=((unsigned char )58); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(9UL)))])=((unsigned char )32); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(10UL)))); + (my_j)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_j))==((long)(16UL)))) { + break; + } + if ((unsigned long)(((long)(my_j))<((long)(my_len)))) { + ((my_line)[my_i])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(my_data)[my_j]))>>((unsigned long)(4UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(my_data)[my_j]))&((unsigned long)(15UL)))]); + } else { + ((my_line)[my_i])=((unsigned char )32); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))])=((unsigned char )32); + } + if ((unsigned long)(((long)((unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))))<((long)(my_len)))) { + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(2UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(((unsigned long)((unsigned long )(my_data)[(unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))]))>>((unsigned long)(4UL)))))&((unsigned long)(15UL)))]); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(3UL)))])=((my_d)[(unsigned long )(((unsigned long)((unsigned long )(my_data)[(unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))]))&((unsigned long)(15UL)))]); + } else { + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(2UL)))])=((unsigned char )32); + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(3UL)))])=((unsigned char )32); + } + ((my_line)[(unsigned long )(((unsigned long)(my_i))+((unsigned long)(4UL)))])=((unsigned char )32); + (my_j)=((unsigned long )(((unsigned long)(my_j))+((unsigned long)(2UL)))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(5UL)))); + } + ((my_line)[my_i])=((unsigned char )32); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_j)=(0UL); + while (1) { + if ((unsigned long)(((unsigned long)(((long)(my_j))==((long)(16UL))))||((unsigned long)(((long)(my_j))>=((long)(my_len)))))) { + break; + } + if ((unsigned long)(((unsigned long)(((long)((unsigned long )(my_data)[my_j]))>=((long)(32UL))))&&((unsigned long)(((long)((unsigned long )(my_data)[my_j]))<((long)(128UL)))))) { + ((my_line)[my_i])=((my_data)[my_j]); + } else { + ((my_line)[my_i])=((unsigned char )46); + } + (my_j)=((unsigned long )(((unsigned long)(my_j))+((unsigned long)(1UL)))); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + ((my_line)[my_i])=((unsigned char )10); + (my_i)=((unsigned long )(((unsigned long)(my_i))+((unsigned long)(1UL)))); + ((my_line)[my_i])=((unsigned char )0UL); }