12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- { %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.
|