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.