In the last chapter we saw that instructions may have register operands and immediate operands. We also mentioned that mixing 32-bit and 64-bit register was not allowed. Today we will talk a bit more about register operands.
In the first installment of this series we did a very first simple program. In this chapter we will continue learning a bit more about AArch64.
In the previous installment I gave some context about the existence of Mercurium as a tool. In this chapter we will start digging into the parsing technology used.
As part of the work I did in my previous employer, we had to develop a C++ front end. This is never an easy task so I will use this series to share some experiences while developing it.
AArch64 is a new 64 bit mode that is part of the ARMv8 architecture presented in 2011 by ARM. It has been progressively been deployed in smartphones and servers. So I think it is a good moment to learn a bit more about the assembler of this architecture.
Our tiny language features a few types: int, float, bool, string and arrays of those types. We can even declare new type names based on other types but it still missing a record type. Today we will address this.
Today we will add a relatively simple feature that will be very useful for a future extension: type declarations.
Today we will do something relatively easy: let’s add a way to declare boolean variables and express boolean literals.
Now that we have the basic language set implemented we can consider adding new features to it. Today we will add arrays.
In this part we will complete the missing statements from part 6 and finish our front end.