mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 01:20:43 +02:00
77 lines
1.3 KiB
ObjectPascal
77 lines
1.3 KiB
ObjectPascal
{ %CPU=i386 }
|
|
{$R-}
|
|
program test_register_pushing;
|
|
|
|
var
|
|
before, after : longint;
|
|
wpush,lpush : longint;
|
|
const
|
|
haserror : boolean = false;
|
|
|
|
begin
|
|
{$ifdef CPUI386}
|
|
{$asmmode att}
|
|
asm
|
|
movl %esp,before
|
|
pushw %es
|
|
movl %esp,after
|
|
popw %es
|
|
end;
|
|
wpush:=before-after;
|
|
if wpush<>2 then
|
|
begin
|
|
Writeln('Compiler does not push "pushw %es" into 2 bytes');
|
|
haserror:=true;
|
|
end;
|
|
asm
|
|
movl %esp,before
|
|
pushl %es
|
|
movl %esp,after
|
|
popl %es
|
|
end;
|
|
lpush:=before-after;
|
|
|
|
if lpush<>4 then
|
|
begin
|
|
Writeln('Compiler does not push "pushl %es" into 4 bytes');
|
|
haserror:=true;
|
|
end;
|
|
|
|
asm
|
|
movl %esp,before
|
|
pushw %gs
|
|
movl %esp,after
|
|
popw %gs
|
|
end;
|
|
wpush:=before-after;
|
|
if wpush<>2 then
|
|
begin
|
|
Writeln('Compiler does not push "pushw %gs" into 2 bytes');
|
|
haserror:=true;
|
|
end;
|
|
asm
|
|
movl %esp,before
|
|
pushl %gs
|
|
movl %esp,after
|
|
popl %gs
|
|
end;
|
|
lpush:=before-after;
|
|
|
|
if lpush<>4 then
|
|
begin
|
|
Writeln('Compiler does not push "pushl %gs" into 4 bytes');
|
|
haserror:=true;
|
|
end;
|
|
{$asmmode intel}
|
|
asm
|
|
mov before,esp
|
|
push es
|
|
mov after,esp
|
|
pop es
|
|
end;
|
|
Writeln('Intel "push es" uses ',before-after,' bytes');
|
|
{$endif CPUI386}
|
|
if haserror then
|
|
Halt(1);
|
|
end.
|