+ 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:
nickysn 2018-07-04 16:48:34 +00:00
parent de3d14b606
commit ff2fff365f
8 changed files with 25 additions and 2 deletions

View File

@ -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

View File

@ -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;

View File

@ -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];

View File

@ -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;

View File

@ -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];

View File

@ -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;

View File

@ -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];

View File

@ -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;