tests and fixes
This commit is contained in:
parent
4dc291b27e
commit
d1d1c88934
11
boot.c
11
boot.c
@ -1033,7 +1033,7 @@ int asm_sub(int lhs, int rhs) {
|
||||
exit(1);
|
||||
}
|
||||
int diff = asm_rr(TYPE_INT, "sub", lhs, rhs);
|
||||
_asm_ri("slli", diff, diff, log_step_of(lhs_type));
|
||||
_asm_ri("srai", diff, diff, log_step_of(lhs_type));
|
||||
return diff;
|
||||
}
|
||||
if (type1) {
|
||||
@ -1818,7 +1818,7 @@ void parse_global_variable(int id, const char* name, int type) {
|
||||
printf("%s:\n", name);
|
||||
if (token_type == TOKEN_ASSIGN) {
|
||||
expect_token(TOKEN_NUMBER);
|
||||
printf(" .word %d\n", token_data);
|
||||
printf(" .dword %d\n", token_data);
|
||||
} else if (token_type == TOKEN_BRACKET_LEFT) {
|
||||
if (type & TYPE_PTR_MASK) {
|
||||
eprintf("array of pointers is not supported\n");
|
||||
@ -1827,14 +1827,11 @@ void parse_global_variable(int id, const char* name, int type) {
|
||||
expect_token(TOKEN_NUMBER);
|
||||
int size = token_data;
|
||||
expect_token(TOKEN_BRACKET_RIGHT);
|
||||
int array_size = 4 * size;
|
||||
if (type == TYPE_CHAR) {
|
||||
array_size = size;
|
||||
}
|
||||
int array_size = type == TYPE_CHAR ? size : 4 * size;
|
||||
printf(" .zero %d\n", array_size);
|
||||
declare_global(id, MARKER_ARRAY, type);
|
||||
} else {
|
||||
printf(" .zero %d\n", 4);
|
||||
printf(" .zero %d\n", 8);
|
||||
unget_token();
|
||||
}
|
||||
expect_token(TOKEN_SEMICOLON);
|
||||
|
18
demo/add.c
18
demo/add.c
@ -1,11 +1,18 @@
|
||||
int printf(const char format[], ...);
|
||||
int scanf(const char format[], ...);
|
||||
int putchar(int ch);
|
||||
|
||||
int* p;
|
||||
void should_be(int expected, int actual) {
|
||||
if (expected != actual) {
|
||||
printf("Expected %d, but got %d\n", expected, actual);
|
||||
} else {
|
||||
printf("Passed\n");
|
||||
}
|
||||
}
|
||||
|
||||
int* p = 0;
|
||||
int f1() {
|
||||
int a = 1;
|
||||
return *(a+(a+(a+(a+(a+(a+(a+(a+(a+(a+(p))))))))))); // a[10]
|
||||
return *(a+(a+(a+(a+(a+(a+(a+(a+(a+(a+(p))))))))))); // p[10]
|
||||
}
|
||||
|
||||
|
||||
@ -13,5 +20,8 @@ int main() {
|
||||
int a[15];
|
||||
p = a;
|
||||
for (int i = 0; i < 15; a[i] = i, ++i);
|
||||
return f1();
|
||||
p -= 5;
|
||||
should_be(5, f1());
|
||||
should_be(5, a - p);
|
||||
should_be(10, 5);
|
||||
}
|
Loading…
Reference in New Issue
Block a user