aarch64: primary, postfix and unary expressions

This commit is contained in:
deesix 2020-02-01 21:23:49 +01:00
parent b581244df0
commit 39936d81cb
3 changed files with 30 additions and 5 deletions

View File

@ -416,6 +416,7 @@ void primary_expr_string()
else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax &STRING_");
else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax &STRING_");
else if(ARMV7L == Architecture) emit_out("!0 R0 LOAD32 R15 MEMORY\n~0 JUMP_ALWAYS\n&STRING_");
else if(AARCH64 == Architecture) emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n&STRING_");
uniqueID_out(function->s, number_string);
/* The target */
@ -433,6 +434,7 @@ void primary_expr_char()
else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %");
else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax %");
else if(ARMV7L == Architecture) emit_out("!");
else if(AARCH64 == Architecture) emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n%");
emit_out(numerate_number(escape_lookup(global_token->s + 1)));
if(ARMV7L == Architecture) emit_out(" R0 LOADI8_ALWAYS");
emit_out("\n");
@ -471,6 +473,11 @@ void primary_expr_number()
emit_out("!0 R0 LOAD32 R15 MEMORY\n~0 JUMP_ALWAYS\n%");
emit_out(global_token->s);
}
else if(AARCH64 == Architecture)
{
emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n%");
emit_out(global_token->s);
}
emit_out("\n");
global_token = global_token->next;
}
@ -661,6 +668,12 @@ void postfix_expr_arrow()
emit_out(numerate_number(i->offset));
emit_out("\n'0' R0 R0 ADD R1 ARITH2_ALWAYS\n");
}
else if(AARCH64 == Architecture)
{
emit_out("LOAD_W1_AHEAD\nSKIP_32_DATA\n%");
emit_out(numerate_number(i->offset));
emit_out("\nADD_X0_X1_X0\n");
}
}
if((!match("=", global_token->s) && (register_size >= i->size)))
@ -669,6 +682,7 @@ void postfix_expr_arrow()
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");
}
}
@ -684,6 +698,7 @@ void postfix_expr_array()
else if(X86 == Architecture) assign = "LOAD_INTEGER\n";
else if(AMD64 == Architecture) assign = "LOAD_INTEGER\n";
else if(ARMV7L == Architecture) assign = "!0 R0 LOAD32 R0 MEMORY\n";
else if(AARCH64 == Architecture) assign = "DEREF_X0\n";
/* Add support for Ints */
if(match("char*", current_target->name))
@ -692,6 +707,7 @@ void postfix_expr_array()
else if(X86 == Architecture) assign = "LOAD_BYTE\n";
else if(AMD64 == Architecture) assign = "LOAD_BYTE\n";
else if(ARMV7L == Architecture) assign = "!0 R0 LOAD8 R0 MEMORY\n";
else if(AARCH64 == Architecture) assign = "DEREF_X0_BYTE\n";
}
else
{
@ -699,9 +715,11 @@ void postfix_expr_array()
else if(X86 == Architecture) emit_out("SAL_eax_Immediate8 !");
else if(AMD64 == Architecture) emit_out("SAL_rax_Immediate8 !");
else if(ARMV7L == Architecture) emit_out("'0' R0 R0 '");
else if(AARCH64 == Architecture) emit_out("LOAD_W2_AHEAD\nSKIP_32_DATA\n%");
emit_out(numerate_number(ceil_log2(current_target->indirect->size)));
if(ARMV7L == Architecture) emit_out("' MOVE_ALWAYS");
else if(AARCH64 == Architecture) emit_out("\nLSHIFT_X0_X0_X2");
emit_out("\n");
}
@ -709,6 +727,7 @@ void postfix_expr_array()
else if(X86 == Architecture) emit_out("ADD_ebx_to_eax\n");
else if(AMD64 == Architecture) emit_out("ADD_rbx_to_rax\n");
else if(ARMV7L == Architecture) emit_out("'0' R0 R0 ADD R1 ARITH2_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("ADD_X0_X1_X0\n");
require_match("ERROR in postfix_expr\nMissing ]\n", "]");
@ -740,6 +759,7 @@ void unary_expr_sizeof()
else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %");
else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax %");
else if(ARMV7L == Architecture) emit_out("!");
else if(AARCH64 == Architecture) emit_out("LOAD_W0_AHEAD\nSKIP_32_DATA\n%");
emit_out(numerate_number(a->size));
if(ARMV7L == Architecture) emit_out(" R0 LOADI8_ALWAYS");
emit_out("\n");
@ -963,6 +983,7 @@ void primary_expr()
if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %0\n");
else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax %0\n");
else if(ARMV7L == Architecture) emit_out("!0 R0 LOADI8_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("SET_X0_TO_0\n");
common_recursion(primary_expr);
@ -970,12 +991,14 @@ void primary_expr()
else if(X86 == Architecture) emit_out("SUBTRACT_eax_from_ebx_into_ebx\nMOVE_ebx_to_eax\n");
else if(AMD64 == Architecture) emit_out("SUBTRACT_rax_from_rbx_into_rbx\nMOVE_rbx_to_rax\n");
else if(ARMV7L == Architecture) emit_out("'0' R0 R0 SUB R1 ARITH2_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("SUB_X0_X1_X0\n");
}
else if('!' == global_token->s[0])
{
if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %1\n");
else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax %1\n");
else if(ARMV7L == Architecture) emit_out("!1 R0 LOADI8_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("SET_X0_TO_1\n");
common_recursion(postfix_expr);
@ -983,6 +1006,7 @@ void primary_expr()
else if(X86 == Architecture) emit_out("XOR_ebx_eax_into_eax\n");
else if(AMD64 == Architecture) emit_out("XOR_rbx_rax_into_rax\n");
else if(ARMV7L == Architecture) emit_out("'0' R0 R0 XOR R1 ARITH2_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("XOR_X0_X1_X0\n");
}
else if('~' == global_token->s[0])
{
@ -992,6 +1016,7 @@ void primary_expr()
else if(X86 == Architecture) emit_out("NOT_eax\n");
else if(AMD64 == Architecture) emit_out("NOT_rax\n");
else if(ARMV7L == Architecture) emit_out("'0' R0 R0 MVN_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("MVN_X0\n");
}
else if(global_token->s[0] == '(')
{

View File

@ -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
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
5cc5c8b56b02f9e2942152e7f06c47fda8ca787217a8276de8c59fa91db763d0 test/results/test100-amd64-binary
82ec5d9255f325c30549ef21c9f8d6a14d8055805051dfbc0aceb6edbec5d3a9 test/results/test100-armv7l-binary
e8c1e8d431338e58f84909e3cd80ee0509df7e0ce0d6a7623211538f494ba928 test/results/test100-knight-posix-binary
87e3a0cb7bcd7e1031ea6f56a337fd0043a40bd707ea1d822f00d2383a3c49c6 test/results/test100-x86-binary
34e6d535e30ef8826a4ad1a4d08b76cfa370c54595599ad3be784b64c9cd8ec5 test/results/test11-amd64-binary
893695e6f300a0fe055fad935a56abd549bba70d1d39c535a680f41bbb73f117 test/results/test11-armv7l-binary
7115c4a552eb4b2c1a868ac3dca43be7d040c8e89b7b66851d0522d298429af9 test/results/test11-knight-native-binary

View File

@ -1 +1 @@
2db4350e7180243dcf427d3e91ace78e375851db9ffb43ea2f29f5f2eb812c81 test/test100/proof
449988fc1b8927d959e7ace25aa1420c44e4b44418fe1805ece868cd8ecb2aa4 test/test100/proof