mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-02 12:50:27 +02:00
+ added x86 compiler intrinsics fpc_x86_sti and fpc_x86_cli, which generate the
'sti' and 'cli' instructions git-svn-id: trunk@39388 -
This commit is contained in:
parent
de3d14b606
commit
ff2fff365f
@ -17,4 +17,6 @@
|
||||
in_x86_inportl = fpc_in_cpu_first+2,
|
||||
in_x86_outportb = fpc_in_cpu_first+3,
|
||||
in_x86_outportw = fpc_in_cpu_first+4,
|
||||
in_x86_outportl = fpc_in_cpu_first+5
|
||||
in_x86_outportl = fpc_in_cpu_first+5,
|
||||
in_x86_cli = fpc_in_cpu_first+6,
|
||||
in_x86_sti = fpc_in_cpu_first+7
|
||||
|
@ -136,6 +136,9 @@ implementation
|
||||
CheckParameters(2);
|
||||
resultdef:=voidtype;
|
||||
end;
|
||||
in_x86_cli,
|
||||
in_x86_sti:
|
||||
resultdef:=voidtype;
|
||||
else
|
||||
Result:=inherited pass_typecheck_cpu;
|
||||
end;
|
||||
@ -152,7 +155,9 @@ implementation
|
||||
expectloc:=LOC_REGISTER;
|
||||
in_x86_outportb,
|
||||
in_x86_outportw,
|
||||
in_x86_outportl:
|
||||
in_x86_outportl,
|
||||
in_x86_cli,
|
||||
in_x86_sti:
|
||||
expectloc:=LOC_VOID;
|
||||
else
|
||||
Result:=inherited first_cpu;
|
||||
@ -457,6 +462,10 @@ implementation
|
||||
outport(NR_AX,S_W,u16inttype);
|
||||
in_x86_outportl:
|
||||
outport(NR_EAX,S_L,s32inttype);
|
||||
in_x86_cli:
|
||||
current_asmdata.CurrAsmList.concat(taicpu.op_none(A_CLI));
|
||||
in_x86_sti:
|
||||
current_asmdata.CurrAsmList.concat(taicpu.op_none(A_STI));
|
||||
else
|
||||
inherited pass_generate_code_cpu;
|
||||
end;
|
||||
|
@ -32,3 +32,5 @@ function fpc_x86_inportl(port : word) : longint;[internproc:fpc_in_x86_inportl];
|
||||
procedure fpc_x86_outportb(port : word;data : byte);[internproc:fpc_in_x86_outportb];
|
||||
procedure fpc_x86_outportw(port : word;data : word);[internproc:fpc_in_x86_outportw];
|
||||
procedure fpc_x86_outportl(port : word;data : longint);[internproc:fpc_in_x86_outportl];
|
||||
procedure fpc_x86_cli;[internproc:fpc_in_x86_cli];
|
||||
procedure fpc_x86_sti;[internproc:fpc_in_x86_sti];
|
||||
|
@ -18,3 +18,5 @@
|
||||
fpc_in_x86_outportb = fpc_in_cpu_first+3;
|
||||
fpc_in_x86_outportw = fpc_in_cpu_first+4;
|
||||
fpc_in_x86_outportl = fpc_in_cpu_first+5;
|
||||
fpc_in_x86_cli = fpc_in_cpu_first+6;
|
||||
fpc_in_x86_sti = fpc_in_cpu_first+7;
|
||||
|
@ -32,3 +32,5 @@ function fpc_x86_inportw(port : word) : word;[internproc:fpc_in_x86_inportw];
|
||||
procedure fpc_x86_outportb(port : word;data : byte);[internproc:fpc_in_x86_outportb];
|
||||
procedure fpc_x86_outportw(port : word;data : word);[internproc:fpc_in_x86_outportw];
|
||||
//procedure fpc_x86_outportl(port : word;data : longint);[internproc:fpc_in_x86_outportl];
|
||||
procedure fpc_x86_cli;[internproc:fpc_in_x86_cli];
|
||||
procedure fpc_x86_sti;[internproc:fpc_in_x86_sti];
|
||||
|
@ -18,3 +18,5 @@
|
||||
fpc_in_x86_outportb = fpc_in_cpu_first+3;
|
||||
fpc_in_x86_outportw = fpc_in_cpu_first+4;
|
||||
// fpc_in_x86_outportl = fpc_in_cpu_first+5;
|
||||
fpc_in_x86_cli = fpc_in_cpu_first+6;
|
||||
fpc_in_x86_sti = fpc_in_cpu_first+7;
|
||||
|
@ -23,3 +23,5 @@ function fpc_x86_inportl(port : word) : longint;[internproc:fpc_in_x86_inportl];
|
||||
procedure fpc_x86_outportb(port : word;data : byte);[internproc:fpc_in_x86_outportb];
|
||||
procedure fpc_x86_outportw(port : word;data : word);[internproc:fpc_in_x86_outportw];
|
||||
procedure fpc_x86_outportl(port : word;data : longint);[internproc:fpc_in_x86_outportl];
|
||||
procedure fpc_x86_cli;[internproc:fpc_in_x86_cli];
|
||||
procedure fpc_x86_sti;[internproc:fpc_in_x86_sti];
|
||||
|
@ -18,3 +18,5 @@
|
||||
fpc_in_x86_outportb = fpc_in_cpu_first+3;
|
||||
fpc_in_x86_outportw = fpc_in_cpu_first+4;
|
||||
fpc_in_x86_outportl = fpc_in_cpu_first+5;
|
||||
fpc_in_x86_cli = fpc_in_cpu_first+6;
|
||||
fpc_in_x86_sti = fpc_in_cpu_first+7;
|
||||
|
Loading…
Reference in New Issue
Block a user