[Self-interest] C preprocessor for asm

Tobias Pape Das.Linux at gmx.de
Fri Jan 20 09:32:59 UTC 2023


Hi uwe

Some ten years ago I ran into similar problems,
even though clang was "younger" then and GCC a bit different.

I wrote about that here:
	https://blog.selflanguage.org/2012/07/02/assembler-woes/


> On 18. Dec 2022, at 01:30, Valery Ushakov <uwe at stderr.spb.ru> wrote:
> 
> Asm sources in Self currently use assembler's macro facilities that
> differ between clang and gas.  Recent versions of clang asm is gas
> compatible, but then as far as I understand apple's clang is special.
> llvm's asm behaves differently if "IsDarwin" and the current llvm
> macro code in Self is effectively apple-only.

yeah, because I developed on my apple machine with Xcode tools and 
hence an "early" clang.

> 
> I'm working on a NetBSD port and NetBSD supports both gcc and clang as
> system compilers.  I will porbably look at the FreeBSD port too and
> FreeBSD is now clang only, afaik.  This makes it a bit painful to work
> with the current asm sources.
> 
> Would there be any objections to switching Self i386 asm sources to
> use the C pre-processor?  NetBSD has been doing that for ages (for a
> large zoo of CPUs) and it's quite ok.
> 
> Some examples
> 
> https://github.com/NetBSD/src/blob/trunk/sys/arch/i386/include/asm.h
> https://github.com/NetBSD/src/blob/trunk/lib/libc/arch/i386/SYS.h
> 
> just to give a general idea of what it looks like.  So, e.g.
> 
>   start_exported_function currentFrame
> 
> will just become
> 
> 
>   start_exported_function(currentFrame)
> 
> Or
> 
>   MACRO(ret_prim_error, error_code)
>       ...
> 
>   ret_bad_type: ret_prim_error badTypeOffset
> 
> 
> will be
> 
>   #define ret_prim_error(error_code) \
> 	... ; \
>       ...
> 
>   ret_bad_type: ret_prim_error(badTypeOffset)

All .S files (capital S) are passed through CPP anyway

I don't know whether there's a huge loss wenn switching from assembler macros to preprocessor...

So why not?

	-Tobias





More information about the Self-interest mailing list