On 25/11/2022 07:39, LIU Hao via Gcc wrote:
I am a Windows developer and I have been writing x86 and amd64 assembly for more than ten years. One annoying thing about GCC is that, for x86 if I need to write I piece of inline assembly then I have to do it twice: one in AT&T syntax and one in Intel syntax.


The AT&T syntax is an awkward foreign dialect, designed originally for PDP-11 and spoken by bumpkins that knew little about x86 or ARM. No official Intel or AMD documentation ever adopts it. The syntax is terrible. Consider:

    movl $1, %eax  ; k; moves $1 into EAX
                   ; but in high-level languages we expect '%eax = $1',
                   ; so it goes awkwardly backwards.

If this looks fine to you, please re-consider:

   cmpl $1, %eax
   jg .L1          ; does this mean 'jump if $1 is greater than %eax'
                   ; or something stupidly reversed?

If CMP still looks fine to you, please consider how to write VFMADD231PD in AT&T syntax, really.


I have been tired of such inconsistency. For God's sake, please deprecate it.



You can have all the personal preferences or prejudices you want, but that won't change the fact that AT&T syntax was the standard x86 assembly from long before Intel thought of making their own syntax, and it is here to stay. No one is going to deprecate it, remove it, or change any defaults.


#include <stdio.h>

int main(void)
{
    int temp=0;

    asm
    (   ".intel_syntax noprefix"
        "mov %0, 1"
        ".att_syntax"
        : "=r"(temp)
        :                   /* no input*/
    );
    printf("temp=%d\n", temp);
}


A use feature that could be added to gcc, perhaps, would be a way to let the user specify the assembler dialect as part of the "asm" statement:

        asm __attribute__((masm = "intel")) ( ... )

The idea with this is that it would issue the requested ".intel_syntax noprefix" or ".att_syntax" at the start of the assembly, and the appropriate directive to return to normal syntax at the end - adjusting according to the "-masm" setting for the compilation. This would, I think, let people write the assembly once in the syntax they choose, and have it work smoothly regardless of which syntax is chosen for compilation.

Reply via email to