Hi Jacob,

interesting project. On my linux machine I also needed to link -lz. 

ys,
Jona

> On 1. Jul 2023, at 14:07, jacob navia <ja...@jacob.remcomp.fr> wrote:
> 
> Hi
> 
> I have developed a new version of the gnu assembler for riscv machines.
> 
> Abstract:
> ———
> 
> The GNU assembler (gas) is centered on flexibility and portability. These two 
> objectives have quite a cost in program readability, code size  and execution 
> time. 
> 
> I have developed a « tiny » version of the GNU assembler focusing on 
> simplicity and speed.
> 
> I have picked up from the several hundreds of megabytes of binutils just the 
> routines that are needed to a functional assembler, for the use case of 
> compiler generated assembler text for a single machine. That meant:
> 
> 1) There is no linker code in this assembler. An assembler doesn’t need any 
> linker code. It is an assembler, period.
> 2) There are no macros, no preprocessing, nothing that makes an assembler 
> easier to use for a human developer. This is NOT a replacement of gas, that 
> is obviously still available everywhere. If you want to develop in assembler 
> use gas, not this tiny assembler.
> 3) Since there isn’t a human user, all the sophisticated error handling is 
> not necessary. Messages are in English ONLY and if you do not know that 
> language just do not make any mistakes!
> 4) All the vectorization for separating the front end and the backend are 
> eliminated. There is no indirection through function tables the functions in 
> the backend are called directly. This has the advantage that when you see a 
> function call like statement like foo(42); it means that you are calling the 
> « foo » function, not a macro that is expanded into something else then 
> renamed to yet another name.
> 5) The BFD library has been disabled. Only some procedures of that library 
> are in the code. The same for libierty, that has almost vanished.
> 6) The code has been cleaned up from all cruft like this:
>          /* The magic number BSD_FILL_SIZE_CROCK_4 is from BSD 4.2 VAX
>         * flavoured AS.  The following bizarre behaviour is to be
>         * compatible with above.  I guess they tried to take up to 8
>         * bytes from a 4-byte expression and they forgot to sign
>         * extend.  */
> #define BSD_FILL_SIZE_CROCK_4 (4)
> 
> So, we are still in 2023 keeping bug compatibility with an  assembler for a 
> machine that ceased production in 2000?
> 
> In a similar vein, all code that referenced the Motorola 68000 (an even older 
> machine) the Z80, the SUN SPARC, etc is gone. This assembler will only 
> produce 64 bits ELF code and compile for a 64 bit risk CPU.
> 
> Availability:
> $ git clone https://github.com/jacob-navia/tiny-asm
> 
> Building the tiny assembler:
> $ gcc -o asm asm.c
> 
> There is no Makefile
> 
> In some machines, the obstack  library is not a part of the libc. (Not linux, 
> Apple, for instance). For those machines obtsack.c is provided in the 
> distribution and the compilation command should be:
> $ gcc -o asm asm.c obstack.c
> 
> star64:~/riscv-asm$ objdump -h asm | grep text
> 11 .text         0002e53e  0000000000028060  0000000000028060  00028060  2**2
> 
> Just 189 758 bytes. The gnu assembler is:
> star64:~/riscv-asm$ objdump -h ../binutils-gdb/gas/as-new | grep text
> 11 .text         000d8d10  00000000000465a0  00000000000465a0  000465a0  2**2
> 888 080 bytes.
> 
> Further work:
> The idea is to replace the system assembler in gcc and replaced with a linked 
> assembler that speeds gcc: instead of writing an assembler file you just pass 
> a pointer to the text buffer in memory.
> But that is still much further down the road.
> 
> Enjoy!
> 
> jacob
> 
> 
> 

Reply via email to