Upgraded M2-Planet and Changelog to reflect improvements

This commit is contained in:
Jeremiah Orians 2018-10-17 18:25:11 -04:00
parent 2c2ef0b908
commit ea9748946e
No known key found for this signature in database
GPG Key ID: 7457821534D2ACCD
2 changed files with 20 additions and 16 deletions

View File

@ -16,9 +16,12 @@
* Current * Current
** Added ** Added
Added support for envp in cc_x86.s
** Changed ** Changed
Reduced stack usage thanks to akkartik Reduced stack usage thanks to akkartik
Changed argv, argc behavior in cc_x86.s
updated stage3/M2-Planet_x86.c to commit 56db0fcad4b3362d14d20e69a17e45d751c264a5
** Fixed ** Fixed
Add debug label Add debug label

View File

@ -1004,7 +1004,7 @@ void initialize_types()
struct type* d = calloc(1, sizeof(struct type)); struct type* d = calloc(1, sizeof(struct type));
d->name = "char**"; d->name = "char**";
d->size = 4; d->size = 4;
d->type = c; d->type = b;
d->indirect = d; d->indirect = d;
/*fix up indrects for chars */ /*fix up indrects for chars */
@ -1246,6 +1246,7 @@ char* break_target_num;
struct token_list* break_frame; struct token_list* break_frame;
int current_count; int current_count;
struct type* last_type; struct type* last_type;
int Address_of;
/* Imported functions */ /* Imported functions */
char* parse_string(char* string); char* parse_string(char* string);
@ -1253,8 +1254,6 @@ int escape_lookup(char* c);
char* numerate_number(int a); char* numerate_number(int a);
struct token_list* emit(char *s, struct token_list* head) struct token_list* emit(char *s, struct token_list* head)
{ {
struct token_list* t = calloc(1, sizeof(struct token_list)); struct token_list* t = calloc(1, sizeof(struct token_list));
@ -1388,8 +1387,8 @@ void variable_load(struct token_list* a)
emit_out("LOAD_BASE_ADDRESS_eax %"); emit_out("LOAD_BASE_ADDRESS_eax %");
emit_out(numerate_number(a->depth)); emit_out(numerate_number(a->depth));
emit_out("\n"); emit_out("\n");
if(TRUE == Address_of) return;
if(match("=", global_token->s)) return; if(match("=", global_token->s)) return;
if(match("char**", a->type->name)) return;
emit_out("LOAD_INTEGER\n"); emit_out("LOAD_INTEGER\n");
} }
@ -1597,7 +1596,7 @@ void postfix_expr_arrow()
emit_out("\nADD_ebx_to_eax\n"); emit_out("\nADD_ebx_to_eax\n");
} }
if(!match("=", global_token->s) && !match("char**", current_target->name)) if((!match("=", global_token->s) && (4 >= i->size)))
{ {
emit_out("LOAD_INTEGER\n"); emit_out("LOAD_INTEGER\n");
} }
@ -1762,6 +1761,16 @@ void bitwise_expr()
void primary_expr() void primary_expr()
{ {
if(match("&", global_token->s))
{
Address_of = TRUE;
global_token = global_token->next;
}
else
{
Address_of = FALSE;
}
if(match("sizeof", global_token->s)) unary_expr_sizeof(); if(match("sizeof", global_token->s)) unary_expr_sizeof();
else if('-' == global_token->s[0]) else if('-' == global_token->s[0])
{ {
@ -1817,7 +1826,7 @@ void collect_local()
struct token_list* a = sym_declare(global_token->s, type_size, function->locals); struct token_list* a = sym_declare(global_token->s, type_size, function->locals);
if(match("main", function->s) && (NULL == function->locals)) if(match("main", function->s) && (NULL == function->locals))
{ {
a->depth = -4; a->depth = -20;
} }
else if((NULL == function->arguments) && (NULL == function->locals)) else if((NULL == function->arguments) && (NULL == function->locals))
{ {
@ -2213,12 +2222,7 @@ void collect_arguments()
{ {
/* deal with foo(int a, char b) */ /* deal with foo(int a, char b) */
struct token_list* a = sym_declare(global_token->s, type_size, function->arguments); struct token_list* a = sym_declare(global_token->s, type_size, function->arguments);
if(match("main", function->s)) if(NULL == function->arguments)
{
if(match("argc", a->s)) a->depth = 4;
if(match("argv", a->s)) a->depth = 8;
}
else if(NULL == function->arguments)
{ {
a->depth = -4; a->depth = -4;
} }
@ -2256,10 +2260,6 @@ void declare_function()
emit_out(":FUNCTION_"); emit_out(":FUNCTION_");
emit_out(function->s); emit_out(function->s);
emit_out("\n"); emit_out("\n");
if(match("main", function->s))
{
emit_out("COPY_esp_to_ebp\t# Deal with special case\n");
}
statement(); statement();
/* Prevent duplicate RETURNS */ /* Prevent duplicate RETURNS */
@ -2292,6 +2292,7 @@ struct token_list* program()
{ {
out = NULL; out = NULL;
function = NULL; function = NULL;
Address_of = FALSE;
struct type* type_size; struct type* type_size;
new_type: new_type: