diff --git a/cc_core.c b/cc_core.c index f3bd832..e909159 100644 --- a/cc_core.c +++ b/cc_core.c @@ -312,6 +312,7 @@ void constant_load(struct token_list* a) else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %"); else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax %"); else if(ARMV7L == Architecture) emit_out("!0 R0 LOAD32 R15 MEMORY\n~0 JUMP_ALWAYS\n%"); + else if(AARCH64 == Architecture) emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n%"); emit_out(a->arguments->s); emit_out("\n"); } @@ -330,9 +331,11 @@ void variable_load(struct token_list* a) else if(X86 == Architecture) emit_out("LOAD_BASE_ADDRESS_eax %"); else if(AMD64 == Architecture) emit_out("LOAD_BASE_ADDRESS_rax %"); else if(ARMV7L == Architecture) emit_out("!"); + else if(AARCH64 == Architecture) emit_out("SET_X0_FROM_BP\nLOAD_W1_AHEAD\nSKIP_32_DATA\n%"); emit_out(numerate_number(a->depth)); if(ARMV7L == Architecture) emit_out(" R0 SUB BP ARITH_ALWAYS"); + else if(AARCH64 == Architecture) emit_out("\nSUB_X0_X0_X1\n"); emit_out("\n"); if(TRUE == Address_of) return; @@ -342,6 +345,7 @@ void variable_load(struct token_list* a) else if(X86 == Architecture) emit_out("LOAD_INTEGER\n"); else if(AMD64 == Architecture) emit_out("LOAD_INTEGER\n"); else if(ARMV7L == Architecture) emit_out("!0 R0 LOAD32 R0 MEMORY\n"); + else if(AARCH64 == Architecture) emit_out("DEREF_X0\n"); } void function_load(struct token_list* a) @@ -357,6 +361,7 @@ void function_load(struct token_list* a) else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax &FUNCTION_"); else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax &FUNCTION_"); else if(ARMV7L == Architecture) emit_out("!0 R0 LOAD32 R15 MEMORY\n~0 JUMP_ALWAYS\n&FUNCTION_"); + else if(AARCH64 == Architecture) emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n&FUNCTION_"); emit_out(a->s); emit_out("\n"); } @@ -368,6 +373,7 @@ void global_load(struct token_list* a) else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax &GLOBAL_"); else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax &GLOBAL_"); else if(ARMV7L == Architecture) emit_out("!0 R0 LOAD32 R15 MEMORY\n~0 JUMP_ALWAYS\n&GLOBAL_"); + else if(AARCH64 == Architecture) emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n&GLOBAL_"); emit_out(a->s); emit_out("\n"); @@ -378,6 +384,7 @@ void global_load(struct token_list* a) else if(X86 == Architecture) emit_out("LOAD_INTEGER\n"); else if(AMD64 == Architecture) emit_out("LOAD_INTEGER\n"); else if(ARMV7L == Architecture) emit_out("!0 R0 LOAD32 R0 MEMORY\n"); + else if(AARCH64 == Architecture) emit_out("DEREF_X0\n"); } } diff --git a/test/test.answers b/test/test.answers index 35a9cf1..b6901a7 100644 --- a/test/test.answers +++ b/test/test.answers @@ -53,10 +53,10 @@ a0ae067746e7a2b01d33950da1cf640e12c3a70a045ab331ea2025af59dec9af test/results/t e01b615db5df31392bd1054c45141dcff936b11dfb1cad270edc0aa67653f5a1 test/results/test10-knight-native-binary c1b5a2a3cd46c5e95e5540e871c2a916e028684ca80f51c001ef489342e27625 test/results/test10-knight-posix-binary b3e13d54aab689137628fb9c4487bfd8288f9bd18bef8fe756577c8d2dce1f1f test/results/test10-x86-binary -0ac616a1780c1d8a850c1df79eab83bed3e329a64a753d7d434f141bd3f9eed9 test/results/test100-amd64-binary -5d96e204eec7ec48a8ffa6a908dbfe33c5e7bc6175be94b2e9ca8a0898088c99 test/results/test100-armv7l-binary -806620e23be9e276f458778c22286c6147fcfe68be2a2c98cfd155473887eb85 test/results/test100-knight-posix-binary -b6efd96491deafc39956d21a4d8d246ae9499bf85c2d523b3a9d48f2635391b6 test/results/test100-x86-binary +5c1eeade7c883561757bea18d020b92ac18ee11d22580512e89bdccc8f322c81 test/results/test100-amd64-binary +4d9097d3f11b0afcb39dfdadf65afe0b82820d7dcf7584391bbdf642bfeab624 test/results/test100-armv7l-binary +5c33800bacfa0dd5984782264c85edb34b42a3f902a267e2199b923990e834a1 test/results/test100-knight-posix-binary +44ccbb6a5e8c3e41ee4925f571649b8a2c8929e462a5fd856e417ec01d86adff test/results/test100-x86-binary 34e6d535e30ef8826a4ad1a4d08b76cfa370c54595599ad3be784b64c9cd8ec5 test/results/test11-amd64-binary 893695e6f300a0fe055fad935a56abd549bba70d1d39c535a680f41bbb73f117 test/results/test11-armv7l-binary 7115c4a552eb4b2c1a868ac3dca43be7d040c8e89b7b66851d0522d298429af9 test/results/test11-knight-native-binary diff --git a/test/test100/proof.answer b/test/test100/proof.answer index 1be1c57..ec83ed6 100644 --- a/test/test100/proof.answer +++ b/test/test100/proof.answer @@ -1 +1 @@ -215e0b555c1dde37a4f2c16a03995475be055e97a019c71fc047d5e9fda81bd9 test/test100/proof +2db4350e7180243dcf427d3e91ace78e375851db9ffb43ea2f29f5f2eb812c81 test/test100/proof