Release 1.0.0
This commit is contained in:
parent
951d259339
commit
e249069cac
|
@ -30,10 +30,20 @@ Reordered conditionals for easier implementation and reduced operations
|
||||||
Broke out OUT and FUNCTION to silence a single GCC warning
|
Broke out OUT and FUNCTION to silence a single GCC warning
|
||||||
Moved required_match and line_error into cc_core.c and removed required_match.c
|
Moved required_match and line_error into cc_core.c and removed required_match.c
|
||||||
Relocated contents of test/functions to functions
|
Relocated contents of test/functions to functions
|
||||||
|
Upgrades mescc-tools to 40537c0200ad28cd5090bc0776251d5983ef56e3 commit
|
||||||
|
Tweaked order for for, while and do loops to make them more in commone
|
||||||
|
Tweaked source to better match assembly
|
||||||
|
Simplify implementation order of logic
|
||||||
|
Simplifed the promote_type logic to a much breifer form
|
||||||
|
Broke out generally useful member lookup
|
||||||
|
Upgraded seed.M1 to be generated by cc_x86
|
||||||
|
|
||||||
** Fixed
|
** Fixed
|
||||||
Fixed detection of locals to screen out all non-primitive name space collisions
|
Fixed detection of locals to screen out all non-primitive name space collisions
|
||||||
Checked in updated gcc function definition
|
Checked in updated gcc function definition
|
||||||
|
Changed's numerate_number's behavior related to zeros
|
||||||
|
Improved error message to help debugging
|
||||||
|
Fixed bootstrap.sh to build a working M2-Planet binary
|
||||||
|
|
||||||
** Removed
|
** Removed
|
||||||
Removed redundent steps in Recursive statement
|
Removed redundent steps in Recursive statement
|
||||||
|
|
11
bootstrap.sh
11
bootstrap.sh
|
@ -4,16 +4,21 @@ set -ex
|
||||||
# Make the required bin directry
|
# Make the required bin directry
|
||||||
[ -d bin ] || mkdir bin
|
[ -d bin ] || mkdir bin
|
||||||
|
|
||||||
|
# Build debug footer
|
||||||
|
blood-elf -f seed.M1 \
|
||||||
|
-o bin/seed-footer.M1 || exit 1
|
||||||
|
|
||||||
# Macro assemble with libc written in M1-Macro
|
# Macro assemble with libc written in M1-Macro
|
||||||
M1 -f test/common_x86/x86_defs.M1 \
|
M1 -f test/common_x86/x86_defs.M1 \
|
||||||
-f test/functions/libc-core.M1 \
|
-f functions/libc-core.M1 \
|
||||||
-f seed.M1 \
|
-f seed.M1 \
|
||||||
|
-f bin/seed-footer.M1 \
|
||||||
--LittleEndian \
|
--LittleEndian \
|
||||||
--Architecture 1 \
|
--Architecture 1 \
|
||||||
-o bin/seed.hex2 || exit 1
|
-o bin/seed.hex2 || exit 2
|
||||||
|
|
||||||
# Resolve all linkages
|
# Resolve all linkages
|
||||||
hex2 -f test/common_x86/ELF-i386.hex2 \
|
hex2 -f test/common_x86/ELF-i386-debug.hex2 \
|
||||||
-f bin/seed.hex2 \
|
-f bin/seed.hex2 \
|
||||||
--LittleEndian \
|
--LittleEndian \
|
||||||
--Architecture 1 \
|
--Architecture 1 \
|
||||||
|
|
112
cc_core.c
112
cc_core.c
|
@ -305,36 +305,24 @@ void primary_expr_variable()
|
||||||
void primary_expr();
|
void primary_expr();
|
||||||
struct type* promote_type(struct type* a, struct type* b)
|
struct type* promote_type(struct type* a, struct type* b)
|
||||||
{
|
{
|
||||||
if(NULL == a)
|
|
||||||
{
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
if(NULL == b)
|
if(NULL == b)
|
||||||
{
|
{
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
if(NULL == a)
|
||||||
|
{
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
struct type* i;
|
struct type* i;
|
||||||
for(i = global_types; NULL != i; i = i->next)
|
for(i = global_types; NULL != i; i = i->next)
|
||||||
{
|
{
|
||||||
if(a->name == i->name)
|
if(a->name == i->name) break;
|
||||||
{
|
if(b->name == i->name) break;
|
||||||
return a;
|
if(a->name == i->indirect->name) break;
|
||||||
}
|
if(b->name == i->indirect->name) break;
|
||||||
if(b->name == i->name)
|
|
||||||
{
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
if(a->name == i->indirect->name)
|
|
||||||
{
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
if(b->name == i->indirect->name)
|
|
||||||
{
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_recursion(FUNCTION f)
|
void common_recursion(FUNCTION f)
|
||||||
|
@ -381,26 +369,16 @@ int ceil_log2(int a)
|
||||||
* postfix-expr ( expression-list-opt )
|
* postfix-expr ( expression-list-opt )
|
||||||
* postfix-expr -> member
|
* postfix-expr -> member
|
||||||
*/
|
*/
|
||||||
|
struct type* lookup_member(struct type* parent, char* name);
|
||||||
void postfix_expr_arrow()
|
void postfix_expr_arrow()
|
||||||
{
|
{
|
||||||
emit_out("# looking up offset\n");
|
emit_out("# looking up offset\n");
|
||||||
global_token = global_token->next;
|
global_token = global_token->next;
|
||||||
struct type* i;
|
|
||||||
for(i = current_target->members; NULL != i; i = i->members)
|
struct type* i = lookup_member(current_target, global_token->s);
|
||||||
{
|
current_target = i->type;
|
||||||
if(match(i->name, global_token->s)) break;
|
global_token = global_token->next;
|
||||||
}
|
|
||||||
if(NULL == i)
|
|
||||||
{
|
|
||||||
file_print("ERROR in postfix_expr ", stderr);
|
|
||||||
file_print(current_target->name, stderr);
|
|
||||||
file_print("->", stderr);
|
|
||||||
file_print(global_token->s, stderr);
|
|
||||||
file_print(" does not exist\n", stderr);
|
|
||||||
line_error();
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if(0 != i->offset)
|
if(0 != i->offset)
|
||||||
{
|
{
|
||||||
emit_out("# -> offset calculation\n");
|
emit_out("# -> offset calculation\n");
|
||||||
|
@ -408,12 +386,11 @@ void postfix_expr_arrow()
|
||||||
emit_out(numerate_number(i->offset));
|
emit_out(numerate_number(i->offset));
|
||||||
emit_out("\nADD_ebx_to_eax\n");
|
emit_out("\nADD_ebx_to_eax\n");
|
||||||
}
|
}
|
||||||
if(!match("=", global_token->next->s) && !match("char**",i->type->name))
|
|
||||||
|
if(!match("=", global_token->s) && !match("char**", current_target->name))
|
||||||
{
|
{
|
||||||
emit_out("LOAD_INTEGER\n");
|
emit_out("LOAD_INTEGER\n");
|
||||||
}
|
}
|
||||||
current_target = i->type;
|
|
||||||
global_token = global_token->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void postfix_expr_array()
|
void postfix_expr_array()
|
||||||
|
@ -421,19 +398,18 @@ void postfix_expr_array()
|
||||||
struct type* array = current_target;
|
struct type* array = current_target;
|
||||||
common_recursion(expression);
|
common_recursion(expression);
|
||||||
current_target = array;
|
current_target = array;
|
||||||
char* assign;
|
char* assign = "LOAD_INTEGER\n";
|
||||||
|
|
||||||
/* Add support for Ints */
|
/* Add support for Ints */
|
||||||
if(!match("char*", current_target->name))
|
if(match("char*", current_target->name))
|
||||||
|
{
|
||||||
|
assign = "LOAD_BYTE\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
emit_out("SAL_eax_Immediate8 !");
|
emit_out("SAL_eax_Immediate8 !");
|
||||||
emit_out(numerate_number(ceil_log2(current_target->indirect->size)));
|
emit_out(numerate_number(ceil_log2(current_target->indirect->size)));
|
||||||
emit_out("\n");
|
emit_out("\n");
|
||||||
assign = "LOAD_INTEGER\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
assign = "LOAD_BYTE\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
emit_out("ADD_ebx_to_eax\n");
|
emit_out("ADD_ebx_to_eax\n");
|
||||||
|
@ -704,17 +680,18 @@ void process_if()
|
||||||
|
|
||||||
void process_for()
|
void process_for()
|
||||||
{
|
{
|
||||||
char* number_string = numerate_number(current_count);
|
struct token_list* nested_locals = break_frame;
|
||||||
current_count = current_count + 1;
|
|
||||||
|
|
||||||
char* nested_break_head = break_target_head;
|
char* nested_break_head = break_target_head;
|
||||||
char* nested_break_func = break_target_func;
|
char* nested_break_func = break_target_func;
|
||||||
char* nested_break_num = break_target_num;
|
char* nested_break_num = break_target_num;
|
||||||
struct token_list* nested_locals = break_frame;
|
|
||||||
break_frame = function->locals;
|
char* number_string = numerate_number(current_count);
|
||||||
|
current_count = current_count + 1;
|
||||||
|
|
||||||
break_target_head = "FOR_END_";
|
break_target_head = "FOR_END_";
|
||||||
break_target_func = function->s;
|
|
||||||
break_target_num = number_string;
|
break_target_num = number_string;
|
||||||
|
break_frame = function->locals;
|
||||||
|
break_target_func = function->s;
|
||||||
|
|
||||||
emit_out("# FOR_initialization_");
|
emit_out("# FOR_initialization_");
|
||||||
uniqueID_out(function->s, number_string);
|
uniqueID_out(function->s, number_string);
|
||||||
|
@ -780,17 +757,18 @@ void process_asm()
|
||||||
/* Process do while loops */
|
/* Process do while loops */
|
||||||
void process_do()
|
void process_do()
|
||||||
{
|
{
|
||||||
char* number_string = numerate_number(current_count);
|
struct token_list* nested_locals = break_frame;
|
||||||
current_count = current_count + 1;
|
|
||||||
|
|
||||||
char* nested_break_head = break_target_head;
|
char* nested_break_head = break_target_head;
|
||||||
char* nested_break_func = break_target_func;
|
char* nested_break_func = break_target_func;
|
||||||
char* nested_break_num = break_target_num;
|
char* nested_break_num = break_target_num;
|
||||||
struct token_list* nested_locals = break_frame;
|
|
||||||
break_frame = function->locals;
|
char* number_string = numerate_number(current_count);
|
||||||
|
current_count = current_count + 1;
|
||||||
|
|
||||||
break_target_head = "DO_END_";
|
break_target_head = "DO_END_";
|
||||||
break_target_func = function->s;
|
|
||||||
break_target_num = number_string;
|
break_target_num = number_string;
|
||||||
|
break_frame = function->locals;
|
||||||
|
break_target_func = function->s;
|
||||||
|
|
||||||
emit_out(":DO_");
|
emit_out(":DO_");
|
||||||
uniqueID_out(function->s, number_string);
|
uniqueID_out(function->s, number_string);
|
||||||
|
@ -819,18 +797,18 @@ void process_do()
|
||||||
/* Process while loops */
|
/* Process while loops */
|
||||||
void process_while()
|
void process_while()
|
||||||
{
|
{
|
||||||
char* number_string = numerate_number(current_count);
|
struct token_list* nested_locals = break_frame;
|
||||||
current_count = current_count + 1;
|
|
||||||
|
|
||||||
char* nested_break_head = break_target_head;
|
char* nested_break_head = break_target_head;
|
||||||
char* nested_break_func = break_target_func;
|
char* nested_break_func = break_target_func;
|
||||||
char* nested_break_num = break_target_num;
|
char* nested_break_num = break_target_num;
|
||||||
struct token_list* nested_locals = break_frame;
|
|
||||||
break_frame = function->locals;
|
char* number_string = numerate_number(current_count);
|
||||||
|
current_count = current_count + 1;
|
||||||
|
|
||||||
break_target_head = "END_WHILE_";
|
break_target_head = "END_WHILE_";
|
||||||
break_target_func = function->s;
|
|
||||||
break_target_num = number_string;
|
break_target_num = number_string;
|
||||||
|
break_frame = function->locals;
|
||||||
|
break_target_func = function->s;
|
||||||
|
|
||||||
emit_out(":WHILE_");
|
emit_out(":WHILE_");
|
||||||
uniqueID_out(function->s, number_string);
|
uniqueID_out(function->s, number_string);
|
||||||
|
@ -852,10 +830,10 @@ void process_while()
|
||||||
emit_out(":END_WHILE_");
|
emit_out(":END_WHILE_");
|
||||||
uniqueID_out(function->s, number_string);
|
uniqueID_out(function->s, number_string);
|
||||||
|
|
||||||
break_frame = nested_locals;
|
|
||||||
break_target_head = nested_break_head;
|
break_target_head = nested_break_head;
|
||||||
break_target_func = nested_break_func;
|
break_target_func = nested_break_func;
|
||||||
break_target_num = nested_break_num;
|
break_target_num = nested_break_num;
|
||||||
|
break_frame = nested_locals;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure that functions return */
|
/* Ensure that functions return */
|
||||||
|
@ -896,7 +874,7 @@ void process_break()
|
||||||
emit_out("_");
|
emit_out("_");
|
||||||
emit_out(break_target_num);
|
emit_out(break_target_num);
|
||||||
emit_out("\n");
|
emit_out("\n");
|
||||||
require_match("ERROR in statement\nMissing ;\n", ";");
|
require_match("ERROR in break statement\nMissing ;\n", ";");
|
||||||
}
|
}
|
||||||
|
|
||||||
void recursive_statement()
|
void recursive_statement()
|
||||||
|
|
18
cc_types.c
18
cc_types.c
|
@ -109,6 +109,24 @@ struct type* lookup_type(char* s, struct type* start)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct type* lookup_member(struct type* parent, char* name)
|
||||||
|
{
|
||||||
|
struct type* i;
|
||||||
|
for(i = parent->members; NULL != i; i = i->members)
|
||||||
|
{
|
||||||
|
if(match(i->name, name)) return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
file_print("ERROR in lookup_member ", stderr);
|
||||||
|
file_print(parent->name, stderr);
|
||||||
|
file_print("->", stderr);
|
||||||
|
file_print(global_token->s, stderr);
|
||||||
|
file_print(" does not exist\n", stderr);
|
||||||
|
line_error();
|
||||||
|
file_print("\n", stderr);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
struct type* type_name();
|
struct type* type_name();
|
||||||
void require_match(char* message, char* required);
|
void require_match(char* message, char* required);
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ char* numerate_number(int a)
|
||||||
if(0 == a)
|
if(0 == a)
|
||||||
{
|
{
|
||||||
result[0] = '0';
|
result[0] = '0';
|
||||||
result[1] = 10;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ b45fae655b7f848b28ebdb8eb2e30ae789fbcf7920bc315395d53986bb1adae4 test/results/t
|
||||||
d511db73158a9544a5b5f828a79751e3de8a04b81c143fd0c146fc22c938aa9f test/results/test08-binary
|
d511db73158a9544a5b5f828a79751e3de8a04b81c143fd0c146fc22c938aa9f test/results/test08-binary
|
||||||
907e1808f2e2b15ac72ebf13898b15c678e68ebd43d673dcd0f408d907e7962f test/results/test09-binary
|
907e1808f2e2b15ac72ebf13898b15c678e68ebd43d673dcd0f408d907e7962f test/results/test09-binary
|
||||||
ef179cd359ba1d61d45089e314cd4ac2069c8dc4dd7494d7c766344ea3c8cf88 test/results/test10-binary
|
ef179cd359ba1d61d45089e314cd4ac2069c8dc4dd7494d7c766344ea3c8cf88 test/results/test10-binary
|
||||||
bf1d76df4d3e701c420e031910ca0da3f390fb3b6d198a0b93349bdbc285adb7 test/results/test100-binary
|
cefac04111bd46b335b6ebf995c07989920fbdbb3eb07e0b29fb7d62dcc70cfe test/results/test100-binary
|
||||||
5aaf399fe706d4a8c85c121c75ada29a65c293b57c98e8999961a2ef0bab0d62 test/results/test11-binary
|
5aaf399fe706d4a8c85c121c75ada29a65c293b57c98e8999961a2ef0bab0d62 test/results/test11-binary
|
||||||
4f8111e73e07255ae203963438c82ea8bcff7474e1594b52b426c58a03cb30eb test/results/test12-binary
|
4f8111e73e07255ae203963438c82ea8bcff7474e1594b52b426c58a03cb30eb test/results/test12-binary
|
||||||
dd74dabfdce8657ff440c1eef531cbf67a64854f2020d4d6bcb65c9cc2d199cb test/results/test13-binary
|
dd74dabfdce8657ff440c1eef531cbf67a64854f2020d4d6bcb65c9cc2d199cb test/results/test13-binary
|
||||||
|
@ -18,10 +18,10 @@ e216869c3fb06de7a41578517c797169e219b20a5697a822ba11eeef0d04f181 test/results/t
|
||||||
315ae5cc5c9d5bdcae0eddd55371128e53e3e9267a2a7c53832ed0af51693bea test/results/test16-binary
|
315ae5cc5c9d5bdcae0eddd55371128e53e3e9267a2a7c53832ed0af51693bea test/results/test16-binary
|
||||||
fdce9856f885418a7b2f69fc24a6cc0c85922313b49694d8030c544e4b2ad16f test/results/test17-binary
|
fdce9856f885418a7b2f69fc24a6cc0c85922313b49694d8030c544e4b2ad16f test/results/test17-binary
|
||||||
9a426972b6df90a158aebe3b8f3eb9ef8a63ce317d764afb92be4fce16542743 test/results/test18-binary
|
9a426972b6df90a158aebe3b8f3eb9ef8a63ce317d764afb92be4fce16542743 test/results/test18-binary
|
||||||
8459b95fb7232f6c0d9c2af94be061d7a14f39659767486af51d5b76e818824e test/results/test19-binary
|
91b761d241dd9969230b235c6cb3bc86cc6b0076d9d1a04c4950de32228149f5 test/results/test19-binary
|
||||||
48d845d20fff86183047342641cc8a6174e71c0ca004be882f0195a141bd64ea test/results/test20-binary
|
48d845d20fff86183047342641cc8a6174e71c0ca004be882f0195a141bd64ea test/results/test20-binary
|
||||||
65354ea5f760e42ea054785033a6519e0eee30d21b1b69ac7715ef958c5e0e2f test/results/test21-binary
|
65354ea5f760e42ea054785033a6519e0eee30d21b1b69ac7715ef958c5e0e2f test/results/test21-binary
|
||||||
dffc0dbe1d99fd156ab406d0b71ce48e6d91072f75b8103a208510293e37735a test/results/test22-binary
|
9a79bdfb35c1c17bb0c66357836382bb08d3876ae8c0c77356776d16aa7faa7f test/results/test22-binary
|
||||||
c745adaa7c5ba2230877fc8d2137a87d25597212069660813460cb6d764de2a0 test/results/test23-binary
|
96e1789254675815a3ec5ad93c1cc32c4805d1ad7f029721cef102c4501df8e2 test/results/test23-binary
|
||||||
50215e4b4e2ce22a959ea7bcfc77c4d6ac45464455f5103afcaea0e84f9bf1d1 test/results/test24-binary
|
50215e4b4e2ce22a959ea7bcfc77c4d6ac45464455f5103afcaea0e84f9bf1d1 test/results/test24-binary
|
||||||
0013b8786068520e386a0cf2ce39c5145462439f17c264e62a9eddb1eed0433b test/results/test99-binary
|
0013b8786068520e386a0cf2ce39c5145462439f17c264e62a9eddb1eed0433b test/results/test99-binary
|
||||||
|
|
|
@ -17,6 +17,7 @@ then
|
||||||
-f cc_types.c \
|
-f cc_types.c \
|
||||||
-f cc_core.c \
|
-f cc_core.c \
|
||||||
-f cc.c \
|
-f cc.c \
|
||||||
|
--debug \
|
||||||
-o test/test100/cc.M1 || exit 1
|
-o test/test100/cc.M1 || exit 1
|
||||||
else
|
else
|
||||||
./bin/M2-Planet-gcc -f functions/file.c \
|
./bin/M2-Planet-gcc -f functions/file.c \
|
||||||
|
@ -33,19 +34,30 @@ else
|
||||||
-f cc_types.c \
|
-f cc_types.c \
|
||||||
-f cc_core.c \
|
-f cc_core.c \
|
||||||
-f cc.c \
|
-f cc.c \
|
||||||
|
--debug \
|
||||||
-o test/test100/cc.M1 || exit 1
|
-o test/test100/cc.M1 || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Build debug footer
|
||||||
|
blood-elf -f test/test100/cc.M1 \
|
||||||
|
-o test/test100/cc-footer.M1 || exit 2
|
||||||
|
|
||||||
# Macro assemble with libc written in M1-Macro
|
# Macro assemble with libc written in M1-Macro
|
||||||
M1 -f test/common_x86/x86_defs.M1 \
|
M1 -f test/common_x86/x86_defs.M1 \
|
||||||
-f functions/libc-core.M1 \
|
-f functions/libc-core.M1 \
|
||||||
-f test/test100/cc.M1 \
|
-f test/test100/cc.M1 \
|
||||||
|
-f test/test100/cc-footer.M1 \
|
||||||
--LittleEndian \
|
--LittleEndian \
|
||||||
--Architecture 1 \
|
--Architecture 1 \
|
||||||
-o test/test100/cc.hex2 || exit 2
|
-o test/test100/cc.hex2 || exit 3
|
||||||
|
|
||||||
# Resolve all linkages
|
# Resolve all linkages
|
||||||
hex2 -f test/common_x86/ELF-i386.hex2 -f test/test100/cc.hex2 --LittleEndian --Architecture 1 --BaseAddress 0x8048000 -o test/results/test100-binary --exec_enable || exit 3
|
hex2 -f test/common_x86/ELF-i386-debug.hex2 \
|
||||||
|
-f test/test100/cc.hex2 \
|
||||||
|
--LittleEndian \
|
||||||
|
--Architecture 1 \
|
||||||
|
--BaseAddress 0x8048000 \
|
||||||
|
-o test/results/test100-binary --exec_enable || exit 4
|
||||||
|
|
||||||
# Ensure binary works if host machine supports test
|
# Ensure binary works if host machine supports test
|
||||||
if [ "$(get_machine)" = "x86_64" ]
|
if [ "$(get_machine)" = "x86_64" ]
|
||||||
|
@ -65,10 +77,10 @@ then
|
||||||
-f cc_types.c \
|
-f cc_types.c \
|
||||||
-f cc_core.c \
|
-f cc_core.c \
|
||||||
-f cc.c \
|
-f cc.c \
|
||||||
-o test/test100/proof || exit 4
|
-o test/test100/proof || exit 5
|
||||||
|
|
||||||
out=$(sha256sum -c test/test100/proof.answer)
|
out=$(sha256sum -c test/test100/proof.answer)
|
||||||
[ "$out" = "test/test100/proof: OK" ] || exit 5
|
[ "$out" = "test/test100/proof: OK" ] || exit 6
|
||||||
[ ! -e bin/M2-Planet ] && mv test/results/test100-binary bin/M2-Planet
|
[ ! -e bin/M2-Planet ] && mv test/results/test100-binary bin/M2-Planet
|
||||||
else
|
else
|
||||||
cp bin/M2-Planet-gcc bin/M2-Planet
|
cp bin/M2-Planet-gcc bin/M2-Planet
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
3243a9d889030bcdb2d8f7dfde62c41a3d5bd2bdf944328c2eccf1d9a3a7592e test/test100/proof
|
4715ce02b077c7487b9d131b5581e662f3c15360bd70371b490bf4563193b9bd test/test100/proof
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
||||||
/* Copyright (C) 2017 Jeremiah Orians
|
/* Copyright (C) 2017 Jeremiah Orians
|
||||||
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||||
* This file is part of MES
|
* This file is part of mescc-tools
|
||||||
*
|
*
|
||||||
* MES is free software: you can redistribute it and/or modify
|
* mescc-tools is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* MES is distributed in the hope that it will be useful,
|
* mescc-tools is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with stage0. If not, see <http://www.gnu.org/licenses/>.
|
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
||||||
/* Copyright (C) 2017 Jeremiah Orians
|
/* Copyright (C) 2017 Jeremiah Orians
|
||||||
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||||
* This file is part of MES
|
* This file is part of mescc-tools
|
||||||
*
|
*
|
||||||
* MES is free software: you can redistribute it and/or modify
|
* mescc-tools is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* MES is distributed in the hope that it will be useful,
|
* mescc-tools is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with stage0. If not, see <http://www.gnu.org/licenses/>.
|
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -179,6 +179,7 @@ int Architectural_displacement(int target, int base)
|
||||||
if(0 == Architecture) return (target - base);
|
if(0 == Architecture) return (target - base);
|
||||||
else if(1 == Architecture) return (target - base);
|
else if(1 == Architecture) return (target - base);
|
||||||
else if(2 == Architecture) return (target - base);
|
else if(2 == Architecture) return (target - base);
|
||||||
|
else if(40 == Architecture) return (target - base);
|
||||||
|
|
||||||
file_print("Unknown Architecture, aborting before harm is done\n", stderr);
|
file_print("Unknown Architecture, aborting before harm is done\n", stderr);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
@ -221,7 +222,11 @@ void storePointer(char ch, FILE* source_file)
|
||||||
displacement = Architectural_displacement(target, base);
|
displacement = Architectural_displacement(target, base);
|
||||||
|
|
||||||
/* output calculated difference */
|
/* output calculated difference */
|
||||||
if(33 == ch) outputPointer(displacement, 1); /* Deal with ! */
|
if(33 == ch)
|
||||||
|
{
|
||||||
|
if(40 == Architecture) outputPointer(displacement - 7, 1); /* Deal with ! */
|
||||||
|
else outputPointer(displacement, 1); /* Deal with ! */
|
||||||
|
}
|
||||||
else if(36 == ch) outputPointer(target, 2); /* Deal with $ */
|
else if(36 == ch) outputPointer(target, 2); /* Deal with $ */
|
||||||
else if(64 == ch) outputPointer(displacement, 2); /* Deal with @ */
|
else if(64 == ch) outputPointer(displacement, 2); /* Deal with @ */
|
||||||
else if(38 == ch) outputPointer(target, 4); /* Deal with & */
|
else if(38 == ch) outputPointer(target, 4); /* Deal with & */
|
||||||
|
@ -457,7 +462,8 @@ int main(int argc, char **argv)
|
||||||
file_print(argv[0], stderr);
|
file_print(argv[0], stderr);
|
||||||
file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian)", stderr);
|
file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian)", stderr);
|
||||||
file_print(" [--BaseAddress 12345] [--Architecture 12345]\nArchitecture", stderr);
|
file_print(" [--BaseAddress 12345] [--Architecture 12345]\nArchitecture", stderr);
|
||||||
file_print(" 0: Knight; 1: x86; 2: AMD64\nTo leverage octal or binary", stderr);
|
file_print(" 0: Knight; 1: x86; 2: AMD64; 40: armv7", stderr);
|
||||||
|
file_print("\nTo leverage octal or binary", stderr);
|
||||||
file_print(" input: --octal, --binary\n", stderr);
|
file_print(" input: --octal, --binary\n", stderr);
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
||||||
/* Copyright (C) 2016 Jeremiah Orians
|
/* Copyright (C) 2016 Jeremiah Orians
|
||||||
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||||
* This file is part of stage0.
|
* This file is part of mescc-tools.
|
||||||
*
|
*
|
||||||
* stage0 is free software: you can redistribute it and/or modify
|
* mescc-tools is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* stage0 is distributed in the hope that it will be useful,
|
* mescc-tools is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with stage0. If not, see <http://www.gnu.org/licenses/>.
|
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -478,7 +478,7 @@ void eval_immediates(struct Token* p)
|
||||||
if((NULL == i->Expression) && !(i->type & MACRO))
|
if((NULL == i->Expression) && !(i->type & MACRO))
|
||||||
{
|
{
|
||||||
int value;
|
int value;
|
||||||
if((1 == Architecture) || (2 == Architecture))
|
if((1 == Architecture) || (2 == Architecture) || (40 == Architecture))
|
||||||
{
|
{
|
||||||
value = numerate_string(i->Text + 1);
|
value = numerate_string(i->Text + 1);
|
||||||
if(('0' == i->Text[1]) || (0 != value))
|
if(('0' == i->Text[1]) || (0 != value))
|
||||||
|
@ -559,7 +559,8 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
file_print("Usage: ", stderr);
|
file_print("Usage: ", stderr);
|
||||||
file_print(argv[0], stderr);
|
file_print(argv[0], stderr);
|
||||||
file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian) [--BaseAddress 12345] [--Architecture 12345]\nArchitecture 0: Knight; 1: x86; 2: AMD64", stderr);
|
file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian) ", stderr);
|
||||||
|
file_print("[--Architecture 12345]\nArchitecture 0: Knight; 1: x86; 2: AMD64; 40: armv7", stderr);
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
else if(match(argv[option_index], "-f") || match(argv[option_index], "--file"))
|
else if(match(argv[option_index], "-f") || match(argv[option_index], "--file"))
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
|
||||||
/* Copyright (C) 2017 Jeremiah Orians
|
/* Copyright (C) 2017 Jeremiah Orians
|
||||||
* This file is part of stage0.
|
* This file is part of mescc-tools.
|
||||||
*
|
*
|
||||||
* stage0 is free software: you can redistribute it and/or modify
|
* mescc-tools is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* stage0 is distributed in the hope that it will be useful,
|
* mescc-tools is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with stage0. If not, see <http://www.gnu.org/licenses/>.
|
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
void file_print(char* s, FILE* f);
|
void file_print(char* s, FILE* f);
|
||||||
char* numerate_number(int a);
|
|
||||||
|
|
||||||
/* Standard C main program */
|
/* Standard C main program */
|
||||||
int main()
|
int main()
|
||||||
|
|
Loading…
Reference in New Issue