mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-15 10:51:08 +02:00
* use the new x86 port access intrinsics in the x86 unit for unix
git-svn-id: trunk@39371 -
This commit is contained in:
parent
2c8853f239
commit
3ed284953b
223
rtl/unix/x86.pp
223
rtl/unix/x86.pp
@ -17,24 +17,26 @@ unit x86;
|
||||
|
||||
interface
|
||||
|
||||
{$inline on}
|
||||
|
||||
Uses BaseUnix;
|
||||
|
||||
function ReadPortB (Port : Longint): Byte;
|
||||
function ReadPortW (Port : Longint): Word;
|
||||
function ReadPortL (Port : Longint): Longint;
|
||||
Procedure ReadPort (Port : Longint; Var Value : Byte);
|
||||
Procedure ReadPort (Port : Longint; Var Value : Longint);
|
||||
Procedure ReadPort (Port : Longint; Var Value : Word);
|
||||
function ReadPortB (Port : Longint): Byte;inline;
|
||||
function ReadPortW (Port : Longint): Word;inline;
|
||||
function ReadPortL (Port : Longint): Longint;inline;
|
||||
Procedure ReadPort (Port : Longint; Var Value : Byte);inline;
|
||||
Procedure ReadPort (Port : Longint; Var Value : Longint);inline;
|
||||
Procedure ReadPort (Port : Longint; Var Value : Word);inline;
|
||||
Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure WritePort (Port : Longint; Value : Byte);
|
||||
Procedure WritePort (Port : Longint; Value : Longint);
|
||||
Procedure WritePort (Port : Longint; Value : Word);
|
||||
Procedure WritePortB (Port : Longint; Value : Byte);
|
||||
Procedure WritePort (Port : Longint; Value : Byte);inline;
|
||||
Procedure WritePort (Port : Longint; Value : Longint);inline;
|
||||
Procedure WritePort (Port : Longint; Value : Word);inline;
|
||||
Procedure WritePortB (Port : Longint; Value : Byte);inline;
|
||||
Procedure WritePortB (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure WritePortL (Port : Longint; Value : Longint);
|
||||
Procedure WritePortW (Port : Longint; Value : Word);
|
||||
Procedure WritePortL (Port : Longint; Value : Longint);inline;
|
||||
Procedure WritePortW (Port : Longint; Value : Word);inline;
|
||||
Procedure WritePortW (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure WritePortl (Port : Longint; Var Buf; Count: longint);
|
||||
|
||||
@ -46,126 +48,73 @@ implementation
|
||||
|
||||
Uses Syscall;
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Byte);
|
||||
{$IFDEF VER3_0}
|
||||
{ Bootstrapping kludge. Note that these do nothing, but since I/O ports are not
|
||||
necessary for bootstrapping, these are only added to make the rtl compile
|
||||
with 3.0.
|
||||
}
|
||||
procedure fpc_x86_outportb(p:longint;v:byte); begin end;
|
||||
procedure fpc_x86_outportw(p:longint;v:word); begin end;
|
||||
procedure fpc_x86_outportl(p:longint;v:longint); begin end;
|
||||
function fpc_x86_inportb(p:word):byte; begin fpc_x86_inportb:=0; end;
|
||||
function fpc_x86_inportw(p:word):word; begin fpc_x86_inportw:=0; end;
|
||||
function fpc_x86_inportl(p:word):longint; begin fpc_x86_inportl:=0; end;
|
||||
{$ENDIF VER3_0}
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Byte);inline;
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
fpc_x86_outportb(Port,Value);
|
||||
end;
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Word);
|
||||
Procedure WritePort (Port : Longint; Value : Word);inline;
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
fpc_x86_outportw(Port,Value);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Longint);
|
||||
Procedure WritePort (Port : Longint; Value : Longint);inline;
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
fpc_x86_outportl(Port,Value);
|
||||
end;
|
||||
|
||||
|
||||
Procedure WritePortB (Port : Longint; Value : Byte);
|
||||
Procedure WritePortB (Port : Longint; Value : Byte);inline;
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
fpc_x86_outportb(Port,Value);
|
||||
end;
|
||||
|
||||
Procedure WritePortW (Port : Longint; Value : Word);
|
||||
Procedure WritePortW (Port : Longint; Value : Word);inline;
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
fpc_x86_outportw(Port,Value);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortL (Port : Longint; Value : Longint);
|
||||
Procedure WritePortL (Port : Longint; Value : Longint);inline;
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
fpc_x86_outportl(Port,Value);
|
||||
end;
|
||||
|
||||
|
||||
@ -251,122 +200,58 @@ end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Byte);
|
||||
Procedure ReadPort (Port : Longint; Var Value : Byte);inline;
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
inb %dx,%al
|
||||
movl value,%edx
|
||||
movb %al,(%edx)
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
inb %dx,%al
|
||||
movq value,%rdx
|
||||
movb %al,(%rdx)
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
Value:=fpc_x86_inportb(Port);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Word);
|
||||
Procedure ReadPort (Port : Longint; Var Value : Word);inline;
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
inw %dx,%ax
|
||||
movl value,%edx
|
||||
movw %ax,(%edx)
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
inw %dx,%ax
|
||||
movq value,%rdx
|
||||
movw %ax,(%rdx)
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
Value:=fpc_x86_inportw(Port);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Longint);
|
||||
Procedure ReadPort (Port : Longint; Var Value : Longint);inline;
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
movl value,%edx
|
||||
movl %eax,(%edx)
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
movq value,%rdx
|
||||
movl %eax,(%rdx)
|
||||
{$endif CPUX86_64}
|
||||
end;
|
||||
Value:=fpc_x86_inportl(Port);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function ReadPortB (Port : Longint): Byte; assembler;
|
||||
function ReadPortB (Port : Longint): Byte;inline;
|
||||
{
|
||||
Reads a byte from port 'Port'
|
||||
}
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
xorl %eax,%eax
|
||||
inb %dx,%al
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
xorl %eax,%eax
|
||||
inb %dx,%al
|
||||
{$endif CPUX86_64}
|
||||
begin
|
||||
ReadPortB:=fpc_x86_inportb(Port);
|
||||
end;
|
||||
|
||||
function ReadPortW (Port : Longint): Word; assembler;
|
||||
function ReadPortW (Port : Longint): Word;inline;
|
||||
{
|
||||
Reads a word from port 'Port'
|
||||
}
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
xorl %eax,%eax
|
||||
inw %dx,%ax
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
xorl %eax,%eax
|
||||
inw %dx,%ax
|
||||
{$endif CPUX86_64}
|
||||
begin
|
||||
ReadPortW:=fpc_x86_inportw(Port);
|
||||
end;
|
||||
|
||||
function ReadPortL (Port : Longint): LongInt; assembler;
|
||||
function ReadPortL (Port : Longint): LongInt;inline;
|
||||
{
|
||||
Reads a LongInt from port 'Port'
|
||||
}
|
||||
asm
|
||||
{$ifdef CPU386}
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
{$endif CPU386}
|
||||
{$ifdef CPUX86_64}
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
{$endif CPUX86_64}
|
||||
begin
|
||||
ReadPortL:=fpc_x86_inportl(Port);
|
||||
end;
|
||||
|
||||
Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
|
||||
|
Loading…
Reference in New Issue
Block a user