From 185ef7a7c207fe70c86da8de8a0ffd8246452903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sun, 14 Nov 2021 00:52:10 +0000 Subject: [PATCH] Improve handling of compound assignment operators. Previously, compound assignment operators were replaced in preprocessor. This only worked for simple cases where we only had 1-token variable. This commit switches to proper implementation in the parser. --- M2libc | 2 +- cc.c | 2 - cc_core.c | 306 ++++++++++++++++++++++++++- cc_reader.c | 54 ----- makefile-tests | 8 + test/test.answers | 90 ++++---- test/test0028/hello-knight-native.sh | 57 +++++ test/test0028/hello-knight-posix.sh | 64 ++++++ test/test0028/run_test.sh | 4 +- test/test1000/proof.answer | 2 +- 10 files changed, 480 insertions(+), 109 deletions(-) create mode 100755 test/test0028/hello-knight-native.sh create mode 100755 test/test0028/hello-knight-posix.sh diff --git a/M2libc b/M2libc index ff549d1..818fcfb 160000 --- a/M2libc +++ b/M2libc @@ -1 +1 @@ -Subproject commit ff549d1424ad0061a177b3826497ce71d415c005 +Subproject commit 818fcfb333d73fbe0293b97b769718f0945e22dc diff --git a/cc.c b/cc.c index 99cd851..31bea84 100644 --- a/cc.c +++ b/cc.c @@ -237,8 +237,6 @@ int main(int argc, char** argv) preprocess(); } - global_token = process_assignment_operators(global_token); - if (PREPROCESSOR_MODE) { fputs("\n/* Preprocessed source */\n", destination_file); diff --git a/cc_core.c b/cc_core.c index e22f8f7..6c25244 100644 --- a/cc_core.c +++ b/cc_core.c @@ -410,6 +410,21 @@ void emit_dereference(int load_byte) { } } +int is_compound_assignment(char* token) +{ + if(match("+=", token)) return TRUE; + else if(match("-=", token)) return TRUE; + else if(match("*=", token)) return TRUE; + else if(match("/=", token)) return TRUE; + else if(match("%=", token)) return TRUE; + else if(match("<<=", token)) return TRUE; + else if(match(">>=", token)) return TRUE; + else if(match("&=", token)) return TRUE; + else if(match("^=", token)) return TRUE; + else if(match("|=", token)) return TRUE; + return FALSE; +} + void variable_load(struct token_list* a, int num_dereference) { require(NULL != global_token, "incomplete variable load received\n"); @@ -434,7 +449,7 @@ void variable_load(struct token_list* a, int num_dereference) emit_out("\n"); if(TRUE == Address_of) return; - if(!match("=", global_token->s)) + if(!match("=", global_token->s) && !is_compound_assignment(global_token->s)) { emit_dereference(FALSE); } @@ -499,7 +514,7 @@ void global_load(struct token_list* a) require(NULL != global_token, "unterminated global load\n"); if(TRUE == Address_of) return; - if(match("=", global_token->s)) return; + if(match("=", global_token->s) || is_compound_assignment(global_token->s)) return; if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) emit_out("LOAD R0 R0 0\n"); else if(X86 == Architecture) emit_out("LOAD_INTEGER\n"); @@ -926,7 +941,7 @@ void postfix_expr_arrow() } } - if((!match("=", global_token->s) && (register_size >= i->size))) + if((!match("=", global_token->s) && !is_compound_assignment(global_token->s) && (register_size >= i->size))) { if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) emit_out("LOAD R0 R0 0\n"); else if(X86 == Architecture) emit_out("LOAD_INTEGER\n"); @@ -988,7 +1003,7 @@ void postfix_expr_array() require_match("ERROR in postfix_expr\nMissing ]\n", "]"); require(NULL != global_token, "truncated array expression\n"); - if(match("=", global_token->s)) + if(match("=", global_token->s) || is_compound_assignment(global_token->s)) { assign = ""; } @@ -1353,6 +1368,213 @@ void primary_expr() else primary_expr_failure(); } +char* compound_operation(char* operator, int is_signed) +{ + char* operation = ""; + if(match("+=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "ADD R0 R1 R0\n"; + else operation = "ADDU R0 R1 R0\n"; + } + else if(X86 == Architecture) operation = "ADD_ebx_to_eax\n"; + else if(AMD64 == Architecture) operation = "ADD_rbx_to_rax\n"; + else if(ARMV7L == Architecture) operation = "'0' R0 R0 ADD R1 ARITH2_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "ADD_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 ADD\n"; + } + else if(match("-=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "SUB R0 R1 R0\n"; + else operation = "SUBU R0 R1 R0\n"; + } + else if(X86 == Architecture) operation = "SUBTRACT_eax_from_ebx_into_ebx\nMOVE_ebx_to_eax\n"; + else if(AMD64 == Architecture) operation = "SUBTRACT_rax_from_rbx_into_rbx\nMOVE_rbx_to_rax\n"; + else if(ARMV7L == Architecture) operation = "'0' R0 R0 SUB R1 ARITH2_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "SUB_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 SUB\n"; + } + else if(match("*=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "MUL R0 R1 R0\n"; + else operation = "MULU R0 R1 R0\n"; + } + else if(X86 == Architecture) + { + if(is_signed) operation = "MULTIPLYS_eax_by_ebx_into_eax\n"; + else operation = "MULTIPLY_eax_by_ebx_into_eax\n"; + } + else if(AMD64 == Architecture) + { + if(is_signed) operation = "MULTIPLYS_rax_by_rbx_into_rax\n"; + else operation = "MULTIPLY_rax_by_rbx_into_rax\n"; + } + else if(ARMV7L == Architecture) operation = "'9' R0 '0' R1 MULS R0 ARITH2_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "MUL_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 MUL\n"; + } + else if(match("/=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "DIV R0 R1 R0\n"; + else operation = "DIVU R0 R1 R0\n"; + } + else if(X86 == Architecture) + { + if (is_signed) operation = "XCHG_eax_ebx\nCDTQ\nDIVIDES_eax_by_ebx_into_eax\n"; + else operation = "XCHG_eax_ebx\nLOAD_IMMEDIATE_edx %0\nDIVIDE_eax_by_ebx_into_eax\n"; + } + else if(AMD64 == Architecture) + { + if(is_signed) operation = "XCHG_rax_rbx\nCQTO\nDIVIDES_rax_by_rbx_into_rax\n"; + else operation = "XCHG_rax_rbx\nLOAD_IMMEDIATE_rdx %0\nDIVIDE_rax_by_rbx_into_rax\n"; + } + else if(ARMV7L == Architecture) + { + if(is_signed) operation = "{LR} PUSH_ALWAYS\n^~divides CALL_ALWAYS\n{LR} POP_ALWAYS\n"; + else operation = "{LR} PUSH_ALWAYS\n^~divide CALL_ALWAYS\n{LR} POP_ALWAYS\n"; + } + else if(AARCH64 == Architecture) + { + if(is_signed) operation = "SDIV_X0_X1_X0\n"; + else operation = "UDIV_X0_X1_X0\n"; + } + else if(RISCV64 == Architecture) + { + if(is_signed) operation = "RD_A0 RS1_A1 RS2_A0 DIV\n"; + else operation = "RD_A0 RS1_A1 RS2_A0 DIVU\n"; + } + } + else if(match("%=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "MOD R0 R1 R0\n"; + else operation = "MODU R0 R1 R0\n"; + } + else if(X86 == Architecture) + { + if(is_signed) operation = "XCHG_eax_ebx\nCDTQ\nMODULUSS_eax_from_ebx_into_ebx\nMOVE_edx_to_eax\n"; + else operation = "XCHG_eax_ebx\nLOAD_IMMEDIATE_edx %0\nMODULUS_eax_from_ebx_into_ebx\nMOVE_edx_to_eax\n"; + } + else if(AMD64 == Architecture) + { + if(is_signed) operation = "XCHG_rax_rbx\nCQTO\nMODULUSS_rax_from_rbx_into_rbx\nMOVE_rdx_to_rax\n"; + else operation = "XCHG_rax_rbx\nLOAD_IMMEDIATE_rdx %0\nMODULUS_rax_from_rbx_into_rbx\nMOVE_rdx_to_rax\n"; + } + else if(ARMV7L == Architecture) + { + if(is_signed) operation = "{LR} PUSH_ALWAYS\n^~moduluss CALL_ALWAYS\n{LR} POP_ALWAYS\n"; + else operation = "{LR} PUSH_ALWAYS\n^~modulus CALL_ALWAYS\n{LR} POP_ALWAYS\n"; + } + else if(AARCH64 == Architecture) + { + if(is_signed) operation = "SDIV_X2_X1_X0\nMSUB_X0_X0_X2_X1\n"; + else operation = "UDIV_X2_X1_X0\nMSUB_X0_X0_X2_X1\n"; + } + else if(RISCV64 == Architecture) + { + if(is_signed) operation = "RD_A0 RS1_A1 RS2_A0 REM\n"; + else operation = "RD_A0 RS1_A1 RS2_A0 REMU\n"; + } + } + else if(match("<<=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "SAL R0 R1 R0\n"; + else operation = "SL0 R0 R1 R0\n"; + } + else if(X86 == Architecture) + { + if(is_signed) operation = "COPY_eax_to_ecx\nCOPY_ebx_to_eax\nSAL_eax_cl\n"; + else operation = "COPY_eax_to_ecx\nCOPY_ebx_to_eax\nSHL_eax_cl\n"; + } + else if(AMD64 == Architecture) + { + if(is_signed) operation = "COPY_rax_to_rcx\nCOPY_rbx_to_rax\nSAL_rax_cl\n"; + else operation = "COPY_rax_to_rcx\nCOPY_rbx_to_rax\nSHL_rax_cl\n"; + } + else if(ARMV7L == Architecture) operation = "LEFT R1 R0 R0 SHIFT AUX_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "LSHIFT_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 SLL\n"; + } + else if(match(">>=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) + { + if(is_signed) operation = "SAR R0 R1 R0\n"; + else operation = "SR0 R0 R1 R0\n"; + } + else if(X86 == Architecture) + { + if(is_signed) operation = "COPY_eax_to_ecx\nCOPY_ebx_to_eax\nSAR_eax_cl\n"; + else operation = "COPY_eax_to_ecx\nCOPY_ebx_to_eax\nSHR_eax_cl\n"; + } + else if(AMD64 == Architecture) + { + if(is_signed) operation = "COPY_rax_to_rcx\nCOPY_rbx_to_rax\nSAR_rax_cl\n"; + else operation = "COPY_rax_to_rcx\nCOPY_rbx_to_rax\nSHR_rax_cl\n"; + } + else if(ARMV7L == Architecture) + { + if(is_signed) operation = "ARITH_RIGHT R1 R0 R0 SHIFT AUX_ALWAYS\n"; + else operation = "RIGHT R1 R0 R0 SHIFT AUX_ALWAYS\n"; + } + else if(AARCH64 == Architecture) + { + if(is_signed) operation = "ARITH_RSHIFT_X0_X1_X0\n"; + else operation = "LOGICAL_RSHIFT_X0_X1_X0\n"; + } + else if(RISCV64 == Architecture) + { + if(is_signed) operation = "RD_A0 RS1_A1 RS2_A0 SRA\n"; + else operation = "RD_A0 RS1_A1 RS2_A0 SRL\n"; + } + } + else if(match("&=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) operation = "AND R0 R0 R1\n"; + else if(X86 == Architecture) operation = "AND_eax_ebx\n"; + else if(AMD64 == Architecture) operation = "AND_rax_rbx\n"; + else if(ARMV7L == Architecture) operation = "NO_SHIFT R0 R0 AND R1 ARITH2_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "AND_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 AND\n"; + } + else if(match("^=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) operation = "XOR R0 R0 R1\n"; + else if(X86 == Architecture) operation = "XOR_ebx_eax_into_eax\n"; + else if(AMD64 == Architecture) operation = "XOR_rbx_rax_into_rax\n"; + else if(ARMV7L == Architecture) operation = "'0' R0 R0 XOR R1 ARITH2_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "XOR_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 XOR\n"; + } + else if(match("|=", operator)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) operation = "OR R0 R0 R1\n"; + else if(X86 == Architecture) operation = "OR_eax_ebx\n"; + else if(AMD64 == Architecture) operation = "OR_rax_rbx\n"; + else if(ARMV7L == Architecture) operation = "NO_SHIFT R0 R0 OR R1 AUX_ALWAYS\n"; + else if(AARCH64 == Architecture) operation = "OR_X0_X1_X0\n"; + else if(RISCV64 == Architecture) operation = "RD_A0 RS1_A1 RS2_A0 OR\n"; + } + else + { + fputs("Found illegal compound assignment operator: ", stderr); + fputs(operator, stderr); + fputc('\n', stderr); + exit(EXIT_FAILURE); + } + return operation; +} + void expression() { bitwise_expr(); @@ -1382,6 +1604,80 @@ void expression() emit_out(store); current_target = integer; } + else if(is_compound_assignment(global_token->s)) + { + maybe_bootstrap_error("compound operator"); + char* push = ""; + char* load = ""; + char* operation = ""; + char* pop = ""; + char* store = ""; + struct type* last_type = current_target; + + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) push = "PUSHR R1 R15\n"; + else if(X86 == Architecture) push = "PUSH_ebx\n"; + else if(AMD64 == Architecture) push = "PUSH_RBX\n"; + else if(ARMV7L == Architecture) push = "{R1} PUSH_ALWAYS\n"; + else if(AARCH64 == Architecture) push = "PUSH_X1\n"; + else if(RISCV64 == Architecture) push = "RS1_SP RS2_A1 @-8 SD\n"; + + if(!match("]", global_token->prev->s) || !match("char*", current_target->name)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) load = "LOAD R1 R1 0\n"; + else if(X86 == Architecture) load = "LOAD_INTEGER_ebx\n"; + else if(AMD64 == Architecture) load = "LOAD_INTEGER_rbx\n"; + else if(ARMV7L == Architecture) load = "!0 R1 LOAD32 R1 MEMORY\n"; + else if(AARCH64 == Architecture) load = "DEREF_X1\n"; + else if(RISCV64 == Architecture) load = "RD_A1 RS1_A1 LD\n"; + } + else + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) load = "LOAD8 R1 R1 0\n"; + else if(X86 == Architecture) load = "LOAD_BYTE_ebx\n"; + else if(AMD64 == Architecture) load = "LOAD_BYTE_rbx\n"; + else if(ARMV7L == Architecture) load = "!0 R1 LOAD8 R1 MEMORY\n"; + else if(AARCH64 == Architecture) load = "DEREF_X1_BYTE\n"; + else if(RISCV64 == Architecture) load = "RD_A1 RS1_A1 LBU\n"; + } + + char *operator = global_token->s; + + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) pop = "POPR R1 R15\n"; + else if(X86 == Architecture) pop = "POP_ebx\n"; + else if(AMD64 == Architecture) pop = "POP_RBX\n"; + else if(ARMV7L == Architecture) pop = "{R1} POP_ALWAYS\n"; + else if(AARCH64 == Architecture) pop = "POP_X1\n"; + else if(RISCV64 == Architecture) pop = "RD_A1 RS1_SP !-8 LD\n"; + + if(!match("]", global_token->prev->s) || !match("char*", current_target->name)) + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) store = "STORE R0 R1 0\n"; + else if(X86 == Architecture) store = "STORE_INTEGER\n"; + else if(AMD64 == Architecture) store = "STORE_INTEGER\n"; + else if(ARMV7L == Architecture) store = "!0 R0 STORE32 R1 MEMORY\n"; + else if(AARCH64 == Architecture) store = "STR_X0_[X1]\n"; + else if(RISCV64 == Architecture) store = "RS1_A1 RS2_A0 SD\n"; + } + else + { + if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) store = "STORE8 R0 R1 0\n"; + else if(X86 == Architecture) store = "STORE_CHAR\n"; + else if(AMD64 == Architecture) store = "STORE_CHAR\n"; + else if(ARMV7L == Architecture) store = "!0 R0 STORE8 R1 MEMORY\n"; + else if(AARCH64 == Architecture) store = "STR_BYTE_W0_[X1]\n"; + else if(RISCV64 == Architecture) store = "RS1_A1 RS2_A0 SB\n"; + } + + common_recursion(expression); + current_target = promote_type(current_target, last_type); + emit_out(push); + emit_out(load); + operation = compound_operation(operator, current_target->is_signed); + emit_out(operation); + emit_out(pop); + emit_out(store); + current_target = integer; + } } @@ -2284,7 +2580,7 @@ new_type: } /* Deal with assignment to a global variable */ - if(match("=",global_token->s)) + if(match("=", global_token->s)) { global_assignment(); goto new_type; diff --git a/cc_reader.c b/cc_reader.c index 79df455..798c3ec 100644 --- a/cc_reader.c +++ b/cc_reader.c @@ -122,21 +122,6 @@ struct token_list* eat_token(struct token_list* token) return token->next; } -struct token_list* insert_token(struct token_list* token, char* new_token) -{ - struct token_list* current = calloc(1, sizeof(struct token_list)); - require(NULL != current, "Exhausted memory while getting token\n"); - - current->s = new_token; - current->prev = token; - current->next = token->next; - current->filename = file; - current->linenumber = line; - token->next->prev = current; - token->next = current; - return current; -} - struct token_list* eat_until_newline(struct token_list* head) { while (NULL != head) @@ -372,42 +357,3 @@ struct token_list* read_all_tokens(FILE* a, struct token_list* current, char* fi return token; } - -struct token_list* replace_assignment(struct token_list* head, char* c) -{ - line = head->linenumber; - file = head->filename; - require(NULL != head->prev, "Expecting identifier before assignment\n"); - head = eat_token(head)->prev; - head = insert_token(head, "="); - head = insert_token(head, head->prev->s); - head = insert_token(head, c); -} - -struct token_list* process_assignment_operators(struct token_list* head) -{ - struct token_list* first = NULL; - while (NULL != head) - { - if(match("+=", head->s)) head = replace_assignment(head, "+"); - else if(match("-=", head->s)) head = replace_assignment(head, "-"); - else if(match("*=", head->s)) head = replace_assignment(head, "*"); - else if(match("/=", head->s)) head = replace_assignment(head, "/"); - else if(match("%=", head->s)) head = replace_assignment(head, "%"); - else if(match("<<=", head->s)) head = replace_assignment(head, "<<"); - else if(match(">>=", head->s)) head = replace_assignment(head, ">>"); - else if(match("&=", head->s)) head = replace_assignment(head, "&"); - else if(match("^=", head->s)) head = replace_assignment(head, "^"); - else if(match("|=", head->s)) head = replace_assignment(head, "|"); - else - { - if(NULL == first) - { - first = head; - } - head = head->next; - } - } - - return first; -} diff --git a/makefile-tests b/makefile-tests index 7803714..d8213cd 100644 --- a/makefile-tests +++ b/makefile-tests @@ -127,6 +127,7 @@ knight-posix-tests: \ test0022-knight-posix-binary \ test0023-knight-posix-binary \ test0024-knight-posix-binary \ + test0028-knight-posix-binary \ test0100-knight-posix-binary \ test0101-knight-posix-binary \ test0102-knight-posix-binary \ @@ -153,6 +154,7 @@ knight-native-tests: \ test0018-knight-native-binary\ test0020-knight-native-binary\ test0024-knight-native-binary\ + test0028-knight-native-binary\ test0106-knight-native-binary | results armv7l-tests: \ @@ -682,6 +684,9 @@ test0023-knight-posix-binary: M2-Planet | results test0024-knight-posix-binary: M2-Planet | results test/test0024/hello-knight-posix.sh +test0028-knight-posix-binary: M2-Planet | results + test/test0028/hello-knight-posix.sh + test0100-knight-posix-binary: M2-Planet | results test/test0100/hello-knight-posix.sh @@ -754,6 +759,9 @@ test0020-knight-native-binary: M2-Planet | results test0024-knight-native-binary: M2-Planet | results test/test0024/hello-knight-native.sh +test0028-knight-native-binary: M2-Planet | results + test/test0028/hello-knight-native.sh + test0106-knight-native-binary: M2-Planet | results test/test0106/hello-knight-native.sh diff --git a/test/test.answers b/test/test.answers index 1aa4ce0..9d1c0eb 100644 --- a/test/test.answers +++ b/test/test.answers @@ -6,155 +6,155 @@ b4dfdb3f7cef6571968fadd3e586a19226a546b3d470cafb8b7c556e1d2d3bfd test/results/t 734dd8ba723a9ed1655824e6158406c0164dd180335ee7f725ea07994b3d5cc7 test/results/test0000-riscv64-binary be8111d178501a86934f10de64f815e6812c5ee31ca31eb5a0e51cdabae5ad14 test/results/test0000-x86-binary 1b0778472de89d20f9676573198128d7e5965a53c6f6c04c4944401f1fd084aa test/results/test0001-aarch64-binary -58f22593c18e8a81229c509b32d61def5b00796555391ce67deaddf503f97e91 test/results/test0001-amd64-binary +611dc9d948c3050bd2b8c62457b5ee1befed5eb3a56a3509d0371d406a3baada test/results/test0001-amd64-binary 8e576c4a78d0cd6b274f4888fbaa5eb56b1559cadd2f307da4bf08a61bf20b2e test/results/test0001-armv7l-binary c682b92792ea1de3904cae7b766c7dc89126a4248cd74e87172b3c522e7c5d54 test/results/test0001-knight-native-binary eb5d77883f5bfc396cd904dd65b9f74956a14a5a8caf6ea3183f580aa911d9b5 test/results/test0001-knight-posix-binary 2904641b917856f3fe8d59d9a86071dceaf9c2e68224bd7f2d4b751ac7ecccb6 test/results/test0001-riscv64-binary 70e722c285f54661ed955edf7ad6efe7a4260f0088485c63d7eefbbba16fa61a test/results/test0001-x86-binary f8ea2874493fd5f9c32776933189931244d99a9142d356bfcc0d513af127ac27 test/results/test0002-aarch64-binary -940203f4c5f365277d6756b6213fc074a21fe15042cbec245d000033714da5bd test/results/test0002-amd64-binary +179389e4ba18ed9f8b9426e51e2cef2cca82a57a17b51ffad963dbce15bb50a7 test/results/test0002-amd64-binary 0d61d816ccde35c856fd6f4d68d069306afec14ee85536ca74dceb9b7ebc970b test/results/test0002-armv7l-binary 60d019b250de2c79cbf9e00dc16334af10cbcecb0f03707e8a941d1782b6b172 test/results/test0002-knight-native-binary 115e807e57a2bb0dfcee9e7caadc18a5757b324dfc8e10f403da67dad8aedfc5 test/results/test0002-knight-posix-binary 519bb5c50d70567562e1cf75ee2e32f21cd9ff885669e18f867aaae315835e41 test/results/test0002-riscv64-binary b721e3d49cc3240bf1cc842b5ef7b66f3f232a66c25f2578b7015bbbbb87c882 test/results/test0002-x86-binary 6f797406596837d105689981959016aab734fe843c689c54463ae895dcda8a5a test/results/test0003-aarch64-binary -477e8e48889a1d51e4a02ac92aa2379eb4e6257898bbc39635e05851a65ff8c9 test/results/test0003-amd64-binary +e823de15f9552a091897085deb00f3f85f718d229effdf2538842f097e60214a test/results/test0003-amd64-binary feed42b431231290f4a542728cec1ce09ca40265d25f100efb8ee1ae600a6fcd test/results/test0003-armv7l-binary d6d358a6669de5253fb3db19b9e54d4fe787b0e921f44794e5ba8bb7138fda5a test/results/test0003-knight-native-binary 700def52f229eec7d528e6475d57a8c0b63c0f506b0c3660cdeb2fc61b82c26a test/results/test0003-knight-posix-binary 2e4d21636421fed2e4ad1e8b985fde57f4421dcb57f5144d95a780072abfb716 test/results/test0003-riscv64-binary a56aa004f9ee964a6209286287096d611306a4c576f2d661ad4a3624af586087 test/results/test0003-x86-binary 35255ab8de43fcfe7111c140f4af6c6f4b04657469181826fbda31562205963e test/results/test0004-aarch64-binary -57005429f09e5045f92ad2805d4be4282230d48ce9cbee347f27abde7f72f85d test/results/test0004-amd64-binary +229a40529c0e60b1c43b21ee3e7d094a97a1fb16218c543e6f81af6ec2b0dc6e test/results/test0004-amd64-binary 71433b3c1b6120d71efa17123ce3e47037f0227cce045616651ca397690636f4 test/results/test0004-armv7l-binary edb1989309249cfea055c6fc99e3eb9f9b548c17325040d1ccffe4aa068de63e test/results/test0004-knight-native-binary ebb6eec7952a47c96b85cf99efe6938c3f76db1bf75e60414340811e6c018398 test/results/test0004-knight-posix-binary b2cf59f78c85af48eb87459b482cb220ad3d39e22c4485b5b4186eaa44c27f5e test/results/test0004-riscv64-binary a98456efe44683493c686d3f96ac5fbf7afca096dd202ab584e88a431016fcef test/results/test0004-x86-binary 9216135390b7e9502c27fe43571315281cc4b5313bd473788c5f1f12f23a91ad test/results/test0005-aarch64-binary -c10cefe7a3ac6b8c7f6155d6b791f2d503e91bd0cb5f6b2effb6a64b6ecb3565 test/results/test0005-amd64-binary +2849f2c70bd6722372c53adaf69e9e6f905c50091057f661f09a79164ac97dfe test/results/test0005-amd64-binary 8f7107595948a52a1bb45b28bd003772d0748eb7b95046e1ffa4bd41995d37c7 test/results/test0005-armv7l-binary 2176f2dbca7d078fb1adaafd7fd3bbe4189e3c83cac015e3d8d44ed6ea4de4df test/results/test0005-knight-native-binary 9d0f951d493ffc703468f39586f92307f950b6486eda6e5f3a962579acf87407 test/results/test0005-knight-posix-binary f51f94e5a804721826b4c14a02831a824e0944c535c7e550bf6805c94158468a test/results/test0005-riscv64-binary 0a8298a6322575d5210b0ebb25a1fd5dbaf4e51920c8ff2b0ab901dc585fcdeb test/results/test0005-x86-binary 421ec5918d95a20d20796e34bbda2b078119932ab4bc5d174e766f2c738dca86 test/results/test0006-aarch64-binary -0d9c6b224d3bf65468b1d19b9689d96effda6d6c60d7644a844c74a235df115d test/results/test0006-amd64-binary +4f8d56cd63751edd24903a79e8b5e6d1c285178bdafc041f2ce77b6c5b5eb529 test/results/test0006-amd64-binary b74d22ca67354fbe1e42a8778268550569667848368b73a3f6ee0645e85865f1 test/results/test0006-armv7l-binary cc620efd904543242c6f24dc788852dec45435eb537b11f8790bd5c45ae1a606 test/results/test0006-knight-native-binary 3fefb5cc02d83eba6704e549d7b2db6adb9ebb06549b3be92954a23689ab3e5a test/results/test0006-knight-posix-binary d6fa5200f9460dada0749992d33ca722c7c50b577de8b6596bfb545a3b232139 test/results/test0006-riscv64-binary f35d9ea659905c13746a7ed8a8aaf3b45cceb702dd347f52c6f280bbfde8acc7 test/results/test0006-x86-binary b60ec52f17fe67ae8fe152b83f4177bb733a806a8be3c6088aad7bbee5624cb1 test/results/test0007-aarch64-binary -08cec93d8a74e305eb1c426c22bc65e019438e16051f10938ad48e8b4b12b1ae test/results/test0007-amd64-binary +2cbcc8929962d92d9143a275dd277d652edffbbf12f210085c5068c67f606843 test/results/test0007-amd64-binary 31c4ec73e819e57fde425c9eab8561eb6eac35750fe7aae8de89ad1ac29e019c test/results/test0007-armv7l-binary 795fa53c7ba5c83c7c6ca4ae036c5bfe919847e96a7393e2755919e74cd6d06a test/results/test0007-knight-native-binary cabedf81faac920388ae1bb7d9eadee067a582aff77860ded6e2ced8c662d7da test/results/test0007-knight-posix-binary c6375d39a36abc2d6f2a804dc62c2c9c18f469f248367394fc410cf775dfd644 test/results/test0007-riscv64-binary 421b1cba08b1f6d016525161b69eec9b22c247c2e57cc46251cdec8955de0b72 test/results/test0007-x86-binary c5ee99709aae9902b9f3e1c964c6f032aa1fcb6ffde22a0f70a39817f1d3e6d1 test/results/test0008-aarch64-binary -86715d23c55fd833205418120adab91dea851909a514f495795a2919cc2e51eb test/results/test0008-amd64-binary +c8057ed2b31ec2537b11f37434aad9174bcc85949c96b3308fa850db027bdfd5 test/results/test0008-amd64-binary ee0af07393d392e4bf327dd98c256481830cdf5ebd22542c39ff0c56849d8db8 test/results/test0008-armv7l-binary 0bfda5393996b2b7fd8231eabc3bba43727f10a489bebbb56bf763223e462fd7 test/results/test0008-knight-native-binary f5c0f8860daf86d1327c321de9647dd7acab478c500826c87fbad7af06999c27 test/results/test0008-knight-posix-binary c1a4d1647a99cc4f34d8ab0fcc998aac6b0900a802b6dea9638cf11653276985 test/results/test0008-riscv64-binary cdc49e5c50b72858ef3910e796ca30a6def56a87a0c51d61808d615c7d0a71a3 test/results/test0008-x86-binary 9b64d8a96e9cc8cc6d45e1a66455c12bb7aaff524b6f28534b90cc88f45daf76 test/results/test0009-aarch64-binary -df2ca3e2ecea73a1ad571b3bb20dabba4981cd37fe24b02fa4e953216405f1bb test/results/test0009-amd64-binary +9a83c3a8dea72becc29b346b825c11a9e3c1133df73c542871a0a1d69797a829 test/results/test0009-amd64-binary b47c90ff6e3ca3f124d37b92af6c2afd98b6e59d09d9d08a1793d31e17c52911 test/results/test0009-armv7l-binary 5197b1899c54d61dcc55ee647ba399f9731c4df8abbdbf5de3e18763921e7f56 test/results/test0009-knight-native-binary d0061811bc3406c3aa4964274bf8734d66a16200025b25ab5b8544203a264026 test/results/test0009-knight-posix-binary 079806a1bb48e3cc33151ff2076bf753e837a8f09f24fc68382c8bdd41374a13 test/results/test0009-riscv64-binary c59d5998e625679976d69df628f4e17152cb006c3904c5398a1e4b62365dd81a test/results/test0009-x86-binary cbbc0a92b5345ba1ec9551ffa5b8ddd406b63578ccfa36bbba6dce5897a5cabb test/results/test0010-aarch64-binary -46a94a80c25d15fb08d0ed107d05c298e4164ec39b6ab3c0ff05b248f14ad4b6 test/results/test0010-amd64-binary +3228705979f56b428f74757543267f59431228027265815559b4a3baa4d0453e test/results/test0010-amd64-binary 5cf6b1a4f65687ad7c1691a8492c6bbbd0bdfc84bab060bcedab200ae651e9a9 test/results/test0010-armv7l-binary b69b69e26372d008a5c6696f3e4e8dd26fa97b197cf5a87a36c9daa6c3c768d4 test/results/test0010-knight-native-binary c75c25d9003a0e5660f52324262b2b69ea8cedeeda0120304f73b84d2979cc42 test/results/test0010-knight-posix-binary 355ef99e6d7c16a8da72679fbae98cabc399d934266aeb7181c3724faf030d8e test/results/test0010-riscv64-binary 43caeff474ae1f337bcef0aa83330121a4290e8bb9d54133391b8eecdba0d84a test/results/test0010-x86-binary 84ff3cff178c655af99354166b8511c2cb754ee90d1d6fe1732cc78ebf472d31 test/results/test0011-aarch64-binary -4749482e5fa5fbc0951a2084afb46815130862f0fb044358edd6da80de41fafe test/results/test0011-amd64-binary +ee2bfc2b42553d230bfe0c1f625aeec57f02a9d4bd139da2fa7f4ad909400806 test/results/test0011-amd64-binary be8e608616dd6873e41ae71a1961da30675bf3c8dac4112e581f32fb0f04a427 test/results/test0011-armv7l-binary 3da409ac1d5a75ca1f6f45eaa0288c99f864e509f31d78591fb8abc6b37f8c8e test/results/test0011-knight-native-binary aeaf7dd87298d759f783ea824a66c299d5f42fb7871f8fb7bf4dfa30a4daf25e test/results/test0011-knight-posix-binary 3c8dcaa9be94c809ecba735e38ee759633e9c2e5351158b033072278ea9fdd11 test/results/test0011-riscv64-binary e13fde65b10af5e27f06c75b463fe59352558071a48753a44c8a7f2ba62c0d52 test/results/test0011-x86-binary aa43c22a01fc1c13ca2cb64c9badd3d0bdb0d71af43c56e6b4c44778edd447a5 test/results/test0012-aarch64-binary -20b79e8652abfba9b433f927f5071414288b9488762818cd52ebe183ffa4be0f test/results/test0012-amd64-binary +d8d8938cf152439356ee95c251b6a7881f8c8d45017c729616ab32e7269a14da test/results/test0012-amd64-binary ef82d7851c81e4d5ce3beea75d86b937d242a22f4fcf25dbd87c8b522c518de8 test/results/test0012-armv7l-binary 3ddca171136dea8e177575620bd5dbda4b51140493114f4bdfd69f095a3d260f test/results/test0012-knight-native-binary a20dfef10a6751ebf29b3d0e80945354239723c3e305565eea89801d4800afb7 test/results/test0012-knight-posix-binary 535c4fde7accc783e6b6de09ae2e0fc43b62646ed33c72698e7ae7b0df798179 test/results/test0012-riscv64-binary aec61658470e1e69c912decccfa0297ee87469d88dfd400d793aeca1f4a4a136 test/results/test0012-x86-binary 4de91619ba2f8c0619ddcf5652053030d35049b42b7ea435d128adeda98329db test/results/test0013-aarch64-binary -2a8969320b7fa4da10106d51e41957e95cde02a0d185c3cfae13b2361f7d53ff test/results/test0013-amd64-binary +8d75130db8c2639b0ef84f58577697fbefc6446190f7be9a2835ed818e0e3d04 test/results/test0013-amd64-binary f68fbe7ccf6191643133892395818889860ed0057156f667a5e3db2d5b9cfd7b test/results/test0013-armv7l-binary 2939f9403d940a4b77e8862c57c780773a9c6b2f7f1103b2a7eb5d0d6f6986b4 test/results/test0013-knight-native-binary 1a35b6013633d46dc5d148e7a204859641c2cc33f6122277e8932705c32542fb test/results/test0013-knight-posix-binary d9ca4f4d8d1bd5b66eb1796c52270439a627601b09aa50a6386dab34544f558a test/results/test0013-riscv64-binary e11d2b637dd542cacd6c72aae7e095c4761ab8448e8edc8c261377ad8c21f750 test/results/test0013-x86-binary 6374f3df391ed3402a1367c21ce6d30fd9425e7735191c97fe9aebe20eb02835 test/results/test0014-aarch64-binary -9152694d18d30cb3f631fe51f86760f601d2ddcefe49c1deb4075f241d4efd7a test/results/test0014-amd64-binary +740a17b57b0560827538563f0b1c1e2d01c25b8c37156399646a5a485ebe9c7a test/results/test0014-amd64-binary d69b9da1f423c59d5e636d2204cfbca4141e3ee869a7226dd83f8fe7ac31fa3e test/results/test0014-armv7l-binary eaad8e0ab16e2f5486de37e6309aa456ee6d8d935e43000333f27382eaeb9565 test/results/test0014-knight-posix-binary fa1d4c3a17e8e40d1d2bebc4a938bf4962c00350b9bb1a592b67ee25e006f79e test/results/test0014-riscv64-binary 1ed6ee84de11d522a729a389dce83e2feba018c7b23fab80532cbdf540a3ef25 test/results/test0014-x86-binary 4283ac717a9efed8b596b8ce2f3b3694a8f2954f5047b773fea8815f74c45396 test/results/test0015-aarch64-binary -b74e6aae0fd0c997c64ee580676322b698e662a69d67cd36fac884249cc235c2 test/results/test0015-amd64-binary +0917a37f4fa61605abd714a498ea4f4e83abbbde084b306d4a475edfc0918490 test/results/test0015-amd64-binary d618e068e4bd1ee4edbdbe6e250d6b681a06ea2018a947c6080d6e176448c718 test/results/test0015-armv7l-binary 323739732059cd20b14ab5857d1acf73565bf1970092e925744b53d6762d4828 test/results/test0015-knight-posix-binary 5ba424041addc15e88867c4d061738955e18b6487e6ac1b3f1617a4abe135009 test/results/test0015-riscv64-binary cd805dd9ac1e6fd1fbfb751353cc1b99f75d25639b6eaf41461049124f207cd6 test/results/test0015-x86-binary 6e1d0e3acc803a3e7d31e6dae313c34778e040e5b5237a5785da284e0b317360 test/results/test0016-aarch64-binary -9cca4d00f4ad4aac85b8325fca355bab1e4a3e67fc4ddbfe27d9406603f585e5 test/results/test0016-amd64-binary +7f368f443bb92e7f6b17fc58058af4e8ea163db23fff73338f3acbb7e6c60d97 test/results/test0016-amd64-binary caf232b8492628857fe67277179cd80ec43d2be89691c6aa6341cad32d8232b2 test/results/test0016-armv7l-binary a2d03a49dbaf737a3b4bf8990415251a2564978d554d9f5656639c254faad5e3 test/results/test0016-knight-posix-binary 47c0cf47ab6dceac343febdcafc09bd330f2d72dcd83f66dcb07e50769275396 test/results/test0016-riscv64-binary 66436b77ae24b5f211254ea1b995971865bf9208a927a31380d2ab966e90706f test/results/test0016-x86-binary 191b56d29ca96f85021e1ed5b7896340fd44600b163a51fb249792651162ea88 test/results/test0017-aarch64-binary -22617a1c98c92a8fb8f447961df331d48146d20afa77a5208394d363657820fe test/results/test0017-amd64-binary +151dfc9eca0e49afcb5ccce7bf87b8ac6007a7b69cac65845d450b978964277c test/results/test0017-amd64-binary fe667bd4166552df42cede3f7fd0c1a9de821a990c5a3baec2b3d2c71f85c6ab test/results/test0017-armv7l-binary 86a2c3d8c328a8e89bd759daf4b904694adddda2a1518d3753af878eac659e98 test/results/test0017-knight-native-binary acdd403a909151fcdb38d39eb5d715c2c1a131fc299115a02b33a903306e84a5 test/results/test0017-knight-posix-binary cb0868af8e43534413cb90d58ea390656f38b74e5d6f385557bf347311a6ea07 test/results/test0017-riscv64-binary 1f7836d5b38685dff2901818b670f9e94a3ddd55c429053ea5d0fed1bbf1f7ef test/results/test0017-x86-binary f51b21429495aca86e4da1e1f97561f2ad95f9db03ea599f116a74fa38b20874 test/results/test0018-aarch64-binary -7429f8d98f9c0b175c927ae88e445c69f8c54d00c51d52b705b8041fba61998b test/results/test0018-amd64-binary +d8bf1d6179c007d5718e2af6305cbace7b723ab9b1d85cbbaf833639a6c5cb8f test/results/test0018-amd64-binary 991ce8143210875c6255527b16ca614fdf30384595031b0cdca873c52f5736a1 test/results/test0018-armv7l-binary 3b152009796efc61119fbae9ea47514de5f127019db8870b42790af8bfa7924f test/results/test0018-knight-native-binary f6447861295901e5688202df55091e3e7fa5a06f2d7882f841a0da8b9054b53d test/results/test0018-knight-posix-binary 81a1ce54af6f8069d17a4d2574ec0985687103033b001a621437ad0823a7b169 test/results/test0018-riscv64-binary e0964d7ed2875353d563d9b8505c8b245b0814ffa2b95dcff3bf1ce42aea0359 test/results/test0018-x86-binary 9fcc1d1f1c02dd41f4586a58a06f35a98420efc803792860aee2945797ad240e test/results/test0019-aarch64-binary -3fcc9f09df4a7fa689fb3d29d5f69823311b9e37a3b273f1f062dc6369376af3 test/results/test0019-amd64-binary +785c46ec6309767638ea6b9662126b5bfe4ea869de0570e84a702c541c451d51 test/results/test0019-amd64-binary 987b80506395c0380808228ccc80044419ac3817af0a26b0d205ccaad31a3363 test/results/test0019-armv7l-binary 3e3c128fff2a85a85fe68fe5525f8bf3503dd4b47bd9686bd9cca55b4687c58f test/results/test0019-knight-posix-binary 7812dba8350b40d612b19482e55bfe35ff2b2f517a1e39828f8523fad28de6c4 test/results/test0019-riscv64-binary a21147e2ae062b57e55c24eb55e9942b770922cd1c9c53348e5fe101d91dd5fa test/results/test0019-x86-binary 43475701b498d648d5246b3cef25dadc5ecab248c84bc5aa4566b13a1689ff1f test/results/test0020-aarch64-binary -bb03c8c1dd714423ddea7e06708488d83eb86d941b25d631bae02a915c483ad4 test/results/test0020-amd64-binary +339136d785f77fd5519aa52491fffb289a837f7d57ad9bd91e285cb28006211b test/results/test0020-amd64-binary 17a1a46da1607f4bdfbb24c0902c6c8d28580fe4cfacdd5e931fa42732917ca7 test/results/test0020-armv7l-binary ead4f942d4a0fd3c48968ea88357a015145eec1c22be446bdc604d49f766eb0e test/results/test0020-knight-native-binary 4fd2a92e4ff7a9d472b6f41a45124a6750f5193a4d5e3f43c291ddf29725a517 test/results/test0020-knight-posix-binary d51d3e89ab40e572eebeeec7795ea0f7b976a8fceff0c9b22bf6988d79cf5f91 test/results/test0020-riscv64-binary d555181ec1a1e2f647a7e161b6c68b88f8b7e3f07a832e324beb959d5db770a6 test/results/test0020-x86-binary b0bddd2529ee6b5904d6c2806eab9885472223ec64b11b909ba3c29bb0ffd95d test/results/test0021-aarch64-binary -4f10aa17a2925326109d5760d04a20c3b4baada118885b5ac7ab490ff95bc79e test/results/test0021-amd64-binary +6244864bf08d6c9624cf7e7607fd687ea861fe871917020279052c9036390428 test/results/test0021-amd64-binary 47c187696cb71ccae1b5fd36270544845d2d5130c4c653ce5d8d1faa6b1c1fdc test/results/test0021-armv7l-binary b72d2c3b4b23edbe2ed7e9cc5abb9b5196151cb6da788837bdd48585ecac4a49 test/results/test0021-knight-posix-binary 7e70c54e30f8cdb4d580bc3d27b840fa136b1f75a84188729f5e7a4dedf2f56b test/results/test0021-riscv64-binary 46c1422aed16564a37db2d28a08bce626fa9483ceba4d36ce28fe6e3c8bd075a test/results/test0021-x86-binary 72139bed2ae2a583dcd8d8181824d7e0793ae3be941b59aec1a0874f24ece246 test/results/test0022-aarch64-binary -1d386d6a3d764150f8535048e31158ca490f6f8030fd0bcb67d731a8055f1d87 test/results/test0022-amd64-binary +bee22d2d58772b9e04131ed7d0383f7e06500b75b5ec6a464875354216de4401 test/results/test0022-amd64-binary 02f74f8e6d62394be8bd5607be1bb9a0b2f48e1146b0d721f9da67f22c8de8e9 test/results/test0022-armv7l-binary fe999543e213553be26cf2715abfe5512f835c7b635c99047f66fde7c471307c test/results/test0022-knight-posix-binary c666149b8eb9f5a0ab1e220c9f7592672934ebe602617b27b6d60d3ccbfa22d9 test/results/test0022-riscv64-binary 33513338e8a8af1e084b61eef7e3fd23fb799eec96490093df250d13e9e1d286 test/results/test0022-x86-binary 7c89643fc880073f9d2dc2e129470a03d82b86e5f0eb7ca3e635ed40eaa85e71 test/results/test0023-aarch64-binary -e3416188528883842f5fd2cbfe699c6d8a23b63bb4d18ca30eae13a45e1d8922 test/results/test0023-amd64-binary +5e4f2ecd2fd96e99e403cda4631ae9fdfc347fb5352ea3b107de2cfefd321232 test/results/test0023-amd64-binary 7522e37632adbfd9b829885c6a1a04561abf4fd3921311877879b8578219dda7 test/results/test0023-armv7l-binary 4c45412e5df83634a7aa553d5f8aef10fcbf9af84f9c1cb7a8e034cf81d77a01 test/results/test0023-knight-posix-binary b008bbb8b1537a52693ba8189068c642a34d1372a3c1cde781c2e297d20bae17 test/results/test0023-riscv64-binary @@ -167,69 +167,71 @@ b4dfdb3f7cef6571968fadd3e586a19226a546b3d470cafb8b7c556e1d2d3bfd test/results/t 734dd8ba723a9ed1655824e6158406c0164dd180335ee7f725ea07994b3d5cc7 test/results/test0024-riscv64-binary be8111d178501a86934f10de64f815e6812c5ee31ca31eb5a0e51cdabae5ad14 test/results/test0024-x86-binary 7204fb15428a0576c5715de44f23cd0594322946f28c2049b7d2fc415d5748c0 test/results/test0025-aarch64-binary -e8748af562228ffe335f3abe97a5aae898f6fb4dacd3e1167701a6690d154241 test/results/test0025-amd64-binary +8b26ccf91d2723d4aee9d71ba198244d59be858f0bafd278d097873dcafb5ca9 test/results/test0025-amd64-binary 7074cb8a9dbd7344ebad1d6679d1896636cef3cc1c5070463226970b08ecc372 test/results/test0025-armv7l-binary 3502984018678fd594aaf1b6fe6712746bd08bf3958b517442e266d3b9a602ff test/results/test0025-riscv64-binary 0844344cb3b97b3ddec2730f2d6c2585faddd3755555166c1da43cf63f1bfdf8 test/results/test0025-x86-binary 3f54de95e457bec97373e8f75b8ef10c95efbb3a02c0f3199f50b549e68db0d7 test/results/test0026-aarch64-binary -bf7204e213a7221aa783a68d841b5dfb6baa2bb0f5d5bf361e1edfe0c6c1b30b test/results/test0026-amd64-binary +373752f8166f58c36febf9984afbf31f6029a1b57d02d5ed4be01b425ce08e55 test/results/test0026-amd64-binary f4676ec3d8eade4c0f405a4b66d7069c78b881fd3f654e7e04f3fe56326542b5 test/results/test0026-armv7l-binary 856fdc8a9045f71583337dfc4a0d2a5cd01a72061d292b6d75e6fa52e70c78df test/results/test0026-riscv64-binary 46381cee997ec150a6b3bb7b978908df8d30cf65cc98744451a00f6eb5a70aa6 test/results/test0026-x86-binary 308ff16be0bbd485cb550ee2f7b49f0bc971bcf00cb043fa59f7053fe5ae7a16 test/results/test0027-aarch64-binary -1591d35cf06ee0b2a746f81445b871e19440908c1b49657c85934d7daf131488 test/results/test0027-amd64-binary +d67883011c96e16dd95ad25a9217c153ef26c1f40c79de5be8377ae3bab15ddf test/results/test0027-amd64-binary d8249590a1e1a43efa5bf05b2b1f0fbea7ebe46c347105b6def3a2cdf07eef59 test/results/test0027-armv7l-binary f871d50855f0b12aa4925b819e1a67140027737262686bca8d622b42cb22bc43 test/results/test0027-riscv64-binary 04e75e83bcea38ba913117c4a4fd1dac5264321aa34eb40a934d6596b6bf7978 test/results/test0027-x86-binary -726532beb0d7fd82698f2d32b86f6da9911601671d98ea3980cb3e2c8dd79e08 test/results/test0028-aarch64-binary -dd00ce94e7d4c5ba5ef594cd10550dca78093436557b686546f9eb0ed145c729 test/results/test0028-amd64-binary -180f14cb3633aeefdf2fbcf6f54337bb0f95424ebd95a045c2e211b8315fdbd4 test/results/test0028-armv7l-binary -66cfba7c0840cf0c1130faf36c3be9f644e2a7d46417d6aa9a8d6a201a50bf72 test/results/test0028-riscv64-binary -97217edf83a000b457c5e7c54ce7b7bd6829264e46e96a2f043f7ef62cd864f2 test/results/test0028-x86-binary +889558c55dc9900546957d789f72e7322dc6b34b03678f99be9165017e0c35b1 test/results/test0028-aarch64-binary +0a56bcd7157618fc6ae63c840da54ac2edd4614922b7424bfd672ff593ff1dda test/results/test0028-amd64-binary +cddae954ec3486707f9c7ea6643093c71cdf31feef6db33ad359432bffcc8252 test/results/test0028-armv7l-binary +7818c4382355883e524b3b5d54d0b8a57b7a627f8b858d22cac231ed96b6a549 test/results/test0028-knight-native-binary +9ed5dc1fb8881d2abb44ebb323d3f5656e60972e2b30f59e7cbc395f20a794fd test/results/test0028-knight-posix-binary +cd74ccf3a4cb56fe52c0106da92a8befd8628993efd9a74765125ff132653533 test/results/test0028-riscv64-binary +770de057c6dfd9a82f3e5a5dd65e0fbd3322bcf3384192190e34d97c99d86eb4 test/results/test0028-x86-binary 29bc8c839549d674dd7717ee31aa7a974fb81163c7a75ec6357ab129f91ba48c test/results/test0100-aarch64-binary -1f51f1fdc444e40917a7fe59d70472b7bca9a623230093c39c55dd5b911e6ed6 test/results/test0100-amd64-binary +1f8b618ccf5ac0d6b8573993c74b3047a2deb27ba734d08881f69e52070e0286 test/results/test0100-amd64-binary bc2666096825062ad5bf840e94fe1fe26b37bef2d024d642cc237f98c65fcccc test/results/test0100-armv7l-binary a41f2c83c97c037b70712755a1e08716cbcf6da916c668993aef5d264f5c5ac5 test/results/test0100-knight-posix-binary cc0a1895d177aa7033c9f1e62808c680a54e3518a511fa2d284b413e60030394 test/results/test0100-riscv64-binary 221f495185d38cf64d699cfa0a893c2eb1621fd70d16ebc385153f9411448500 test/results/test0100-x86-binary 6540bbe5c06adfd3d162197c2c33f75936913b47bdbfc5b48ba0ce01b4995840 test/results/test0101-aarch64-binary -80fd9a7b43dfba04b87b50046cdf3e8adbbad4300331e28cf62e4e3aeb0bdbd3 test/results/test0101-amd64-binary +d7f780ba3042a799fb98c9d6f0df00a8ca6a7a1f30145229b82745760068b30d test/results/test0101-amd64-binary de2dbfc6c00fe1e6a0a685f9f103f462857a74205bd8368f52933887d141d6dd test/results/test0101-armv7l-binary 1c0a40f524edbbcaad7e58b4c8c949299f4f6e1c81663990d6b956eee4406c20 test/results/test0101-knight-posix-binary d9cc92025206a788c300c20cc77513a94b9ac97ecfb67c48a4e1c97d315399ac test/results/test0101-riscv64-binary 52d099e59607d7b192f7de95c870e8f753fe03d00674bfbeab3293b7796a7801 test/results/test0101-x86-binary d3a8c1a1996c6e0dc15df146ffbd0904a22396c7c695719be59e23404ffae90f test/results/test0102-aarch64-binary -7a3fba04443ae81d8e60f371f66bf710fb9f430011e3a4d3b9a80585186719ba test/results/test0102-amd64-binary +b0214152c0991ca96a5247cf5e8f6887a96b326f6b9a6b6b4d583dad72061343 test/results/test0102-amd64-binary df5319bfca446a006591fdf54fabfa6069d8eaecf5ed3ffa2d725aa9dd43ea07 test/results/test0102-armv7l-binary 801bda8a34306f4246b8f5a6b84f96ecce49cc41a6af307304e986ab47ac9f1b test/results/test0102-knight-posix-binary 3143bcdc4089bebbe5d73ccc224611732524e38e2064c3ce3e3ce4329a900a97 test/results/test0102-riscv64-binary 5530eaa67a2b5c69de3f4ae35a7bd0cee04e9590ed019bca4710b95cf55f8e2c test/results/test0102-x86-binary 26c45c99e52fb190bf7edee34871efd5b2a9ab2e6015d230b65d8a9bb392ffab test/results/test0103-aarch64-binary -7f77190dabdcadda0edb487830a01db555a3a5d68113a8a25bd13e0cc01548a8 test/results/test0103-amd64-binary +95a3940a793a5ca5e628c026f4d74d54d735c21c5292e49d2a4ce75a4106cf7a test/results/test0103-amd64-binary 053435f9f9dfeef2a1915b7dfcb79ebab739fa1eda07f18c82d73c30b6ec7a78 test/results/test0103-armv7l-binary 074bc201b8fa18ad990f4bcef719c545338f5a16d5f2e65a6887c40e4c725da8 test/results/test0103-knight-posix-binary df66401e39c9547e7da54b60685aaf0d41a1ffb8b92af0b215243ea4f0423a20 test/results/test0103-riscv64-binary f9422c80fe6f61b8d980f5732165fb3f5de3e936c3255b31e9ce54b5d226aa02 test/results/test0103-x86-binary 55b956ce08ff2686a1776f05a67520b6155b714590227fd873613dfdda0b412c test/results/test0104-aarch64-binary -2503653c76bdbe7769609335f4bf992e8a825e8363c2201ecab6586621b880f0 test/results/test0104-amd64-binary +beb37159c9d3555023feebeeb80be84f6731d21784116ba41631c0e9789ff911 test/results/test0104-amd64-binary 210d0c33d7936e59898b2ab5b368fda190bf0805d626d1d7ecac8294c6ae29ab test/results/test0104-armv7l-binary 09e75b87ff997c1d69d06e9a231c87798ce91c9832afc6e521d75ee4fee50e2d test/results/test0104-riscv64-binary ee06037811ee75d750a34ada90a04d18001506b833717339b186ebedeeba2632 test/results/test0104-x86-binary 4583b98a125dca7a1b870e95ffd7aa2cb9054ff03b803d1606adf5004a0463ad test/results/test0105-aarch64-binary -f853efe5c776228c6334e09521b0653735b2e5f0e76863b47d2a07caada7c151 test/results/test0105-amd64-binary +037f3ff2d1d60c329a2cc02b776dc437cb690ab9848b4d8bb7de42383b0c2f00 test/results/test0105-amd64-binary ed830495864dd849ccd8896a728a52bde9be179690db808f7e14144cf3dcbfa3 test/results/test0105-armv7l-binary e831f44d688f3e73b35dcb17a3eb5b2ecd72005f5c407d89770508ff98863f9e test/results/test0105-riscv64-binary b02855fed0b4040ab8b7f2711b62967032b7cb52135dd3187e29642713c311fe test/results/test0105-x86-binary eb1f6aab09a1a4966f9f49a518d8aa03ca97aa7c46e443871d758a306671a85e test/results/test0106-aarch64-binary -1eaf43e60d9304fe45ca492a673e6b179b45da211542140cbdaa19f14affde9f test/results/test0106-amd64-binary +a1b650855e716d79db70c37b95adb3e6527a881217ebb118db976fb18b170a8d test/results/test0106-amd64-binary 15f5b35c7b10be4b41fde817fb529d950d1f06b0cb890a2dbae0cb66a203463f test/results/test0106-armv7l-binary 1abb9b84c4a75d6e9cd2da1f7eba82cd7e12942874130e57ce07e00309bf0b85 test/results/test0106-knight-native-binary a2cbfd5f76d3be8049c6737e3fa02f191caf29b6885db006fa23f86e6eacc186 test/results/test0106-knight-posix-binary d75e450e2fcdf19df63f9d6a3fe5e032933e57b33f6f06b39a8ed2f3dc759f17 test/results/test0106-riscv64-binary 473cc504d6cba9eaf648abcf15c83a317ff3f4a7f08f5e8936e3b35b2cc4fbc6 test/results/test0106-x86-binary -7729e3279192002ce69af057534670779b30c7ae0feaef82e11d4c8b74278b94 test/results/test1000-aarch64-binary -be88d5e1b0c5584192beb7b7380e578925993a636a0e338a319f39b56407a192 test/results/test1000-amd64-binary -92f9f8134a2213d45919a562160d57f58de94870979af80ff7d52b47c196536f test/results/test1000-armv7l-binary -e47006b7829ddfc1a4f1aa545e8a09950e8053ff6841c5d5922a330c8849b384 test/results/test1000-knight-posix-binary -bbeb55c436f1c26e1cddfb0a47da350219f817017ba0139dbde56392522f4406 test/results/test1000-riscv64-binary -0891395cd28e6d0adb6feed07b0fce5b8c1245eeb2bf673aa488fe037daf349c test/results/test1000-x86-binary +3ea998973a899d02dab1993a42ae052e9eb7a1ef808ae90f62575cf3806743ec test/results/test1000-aarch64-binary +d7b8567571bf5f98a896ad92064d1e3afa3c7c2ef6922ab79a2349bef636d85a test/results/test1000-amd64-binary +4a1d98867493f8e597e023082febd667d9d9618ea9f1941d95e6b5aac310822b test/results/test1000-armv7l-binary +e198fcea72177bb6bc2906c6aa76b334e6ced8c431b55425fea8285615d50c4a test/results/test1000-knight-posix-binary +b6955def425d3ba6e42f70d8bd3f03d53896501ba850a4faf388989fb60753e9 test/results/test1000-riscv64-binary +a900cd0852312fde60687fad99ee0ffa23624fd83de967b741eefd5bf9a41316 test/results/test1000-x86-binary diff --git a/test/test0028/hello-knight-native.sh b/test/test0028/hello-knight-native.sh new file mode 100755 index 0000000..172320d --- /dev/null +++ b/test/test0028/hello-knight-native.sh @@ -0,0 +1,57 @@ +#! /bin/sh +## Copyright (C) 2017 Jeremiah Orians +## Copyright (C) 2021 deesix +## This file is part of M2-Planet. +## +## M2-Planet is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## M2-Planet is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with M2-Planet. If not, see . + +set -x + +TMPDIR="test/test0028/tmp-knight-native" +mkdir -p ${TMPDIR} + +# Build the test +bin/M2-Planet \ + --architecture knight-native \ + -f test/test0028/assignment.c \ + -o ${TMPDIR}/assignment.M1 \ + || exit 1 + +# Macro assemble with libc written in M1-Macro +M1 \ + -f M2libc/knight/knight-native_defs.M1 \ + -f M2libc/knight/libc-native.M1 \ + -f ${TMPDIR}/assignment.M1 \ + --big-endian \ + --architecture knight-native \ + -o ${TMPDIR}/assignment.hex2 \ + || exit 2 + +# Resolve all linkages +hex2 \ + -f ${TMPDIR}/assignment.hex2 \ + --big-endian \ + --architecture knight-native \ + --base-address 0x0 \ + -o test/results/test0028-knight-native-binary \ + || exit 3 + +# Ensure binary works if host machine supports test +if [ "$(get_machine ${GET_MACHINE_FLAGS})" = "knight-native" ] +then + # Verify that the compiled program returns the correct result + vm --rom ./test/results/test0028-knight-native-binary + [ 0 = $? ] || exit 3 +fi +exit 0 diff --git a/test/test0028/hello-knight-posix.sh b/test/test0028/hello-knight-posix.sh new file mode 100755 index 0000000..d1ede8a --- /dev/null +++ b/test/test0028/hello-knight-posix.sh @@ -0,0 +1,64 @@ +#! /bin/sh +## Copyright (C) 2017 Jeremiah Orians +## Copyright (C) 2021 deesix +## This file is part of M2-Planet. +## +## M2-Planet is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## M2-Planet is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with M2-Planet. If not, see . + +set -x + +TMPDIR="test/test0028/tmp-knight-posix" +mkdir -p ${TMPDIR} + +# Build the test +bin/M2-Planet \ + --architecture knight-posix \ + -f test/test0028/assignment.c \ + -o ${TMPDIR}/assignment.M1 \ + || exit 1 + +# Macro assemble with libc written in M1-Macro +M1 \ + -f M2libc/knight/knight_defs.M1 \ + -f M2libc/knight/libc-core.M1 \ + -f ${TMPDIR}/assignment.M1 \ + --big-endian \ + --architecture knight-posix \ + -o ${TMPDIR}/assignment.hex2 \ + || exit 2 + +# Resolve all linkages +hex2 \ + -f M2libc/knight/ELF-knight.hex2 \ + -f ${TMPDIR}/assignment.hex2 \ + --big-endian \ + --architecture knight-posix \ + --base-address 0x0 \ + -o test/results/test0028-knight-posix-binary \ + || exit 3 + +# Ensure binary works if host machine supports test +if [ "$(get_machine ${GET_MACHINE_FLAGS})" = "knight" ] && [ ! -z "${KNIGHT_EMULATION}" ] +then + # Verify that the resulting file works + vm --POSIX-MODE --rom ./test/results/test0028-knight-posix-binary --memory 2M + [ 0 = $? ] || exit 3 + +elif [ "$(get_machine ${GET_MACHINE_FLAGS})" = "knight" ] +then + # Verify that the compiled program returns the correct result + ./test/results/test0028-knight-posix-binary + [ 0 = $? ] || exit 3 +fi +exit 0 diff --git a/test/test0028/run_test.sh b/test/test0028/run_test.sh index 86259ae..db1d7ac 100755 --- a/test/test0028/run_test.sh +++ b/test/test0028/run_test.sh @@ -20,7 +20,7 @@ set -ex ARCH="$1" . test/env.inc.sh -TMPDIR="test/test0027/tmp-${ARCH}" +TMPDIR="test/test0028/tmp-${ARCH}" mkdir -p ${TMPDIR} @@ -67,6 +67,6 @@ if [ "$(get_machine ${GET_MACHINE_FLAGS})" = "${ARCH}" ] then . ./sha256.sh # Verify that the resulting file works - ./test/results/test0027-${ARCH}-binary || exit 4 + ./test/results/test0028-${ARCH}-binary || exit 4 fi exit 0 diff --git a/test/test1000/proof.answer b/test/test1000/proof.answer index 6f7f2ac..4de5410 100644 --- a/test/test1000/proof.answer +++ b/test/test1000/proof.answer @@ -1 +1 @@ -9ee96e67f254dab17c5a2aa697dfd609d1b07103e0a8b873ba3d7e22386a8c3c test/test1000/proof +e8f9ec5440c1ddde95f342671f4ffb9c3b2914c57a7a3aad2ed670096491c327 test/test1000/proof