Please, really, make `-masm=intel` the default for x86
David Brown
david.brown@hesbynett.no
Fri Nov 25 13:31:55 GMT 2022
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.
More information about the Gcc
mailing list