* regcall updates (untested)

This commit is contained in:
peter 2003-12-04 21:22:38 +00:00
parent ef2b767191
commit e7c99a0e41
4 changed files with 113 additions and 49 deletions

View File

@ -1,5 +1,5 @@
#
# Don't edit, this file is generated by FPCMake Version 1.1 [2003/10/28]
# Don't edit, this file is generated by FPCMake Version 1.1 [2003/11/01]
#
default: all
MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom
@ -1376,7 +1376,7 @@ crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp dos$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : printer.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
objpas$(PPUEXT) dos$(PPUEXT) doscalls$(PPUEXT)
objpas$(PPUEXT) dos$(PPUEXT) doscalls$(PPUEXT) sysconst$(PPUEXT)
$(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
sysutils$(PPUEXT) typinfo$(PPUEXT)
@ -1391,8 +1391,8 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) $(OBJPASDIR)/types.pp
rtlconst$(PPUEXT) : $(OBJPASDIR)/rtlconst.pp
$(COMPILER) $(OBJPASDIR)/rtlconst.pp
sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT)
$(COMPILER) $(OBJPASDIR)/rtlconst.pp
sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) $(OBJPASDIR)/sysconst.pp
dateutil$(PPUEXT) : $(OBJPASDIR)/dateutil.pp
$(COMPILER) $(OBJPASDIR)/dateutil.pp

View File

@ -79,7 +79,7 @@ function DosCreateThread (var TID: longint; Address: TThreadEntry;
(* Overloaded version for compatibility. *)
function DosCreateThread (var TID: longint; Address: pointer;
AParam: Pointer; Flags, StackSize: longint): longint; cdecl;
{Suspend a running thread.}
function DosSuspendThread(TID:longint):longint; cdecl;
@ -316,7 +316,7 @@ const DBG_C_Null = 0; { Null }
DBG_X_FIRST_CHANCE = 1;
DBG_X_LAST_CHANCE = 2;
DBG_X_STACK_INVALID = 3;
DBG_W_Local = $0000001;
DBG_W_Global = $0000002;
DBG_W_Execute = $00010000;
@ -328,7 +328,7 @@ for writing debuggers.}
function DosDebug (DebugBuf: PDbgBuf):longint; cdecl;
function DosDebug (var APDbgBuf: TDbgBuf): longint; cdecl;
{ codeTerminate values (also passed to ExitList routines) }
const TC_exit = 0;
TC_harderror = 1;
@ -377,7 +377,7 @@ const deSync = 0; {Wait until program terminates.}
EXEC_BACKGROUND =deBackground;
EXEC_LOAD =deSuspended;
EXEC_ASYNCRESULTDB =deAsyncResultDb;
type TResultCodes=record
TerminateReason, {0 = Normal termionation.
1 = Critical error.
@ -654,7 +654,7 @@ type TgEA = record
const doOpened = 1;
doCreated = 2;
doOverwritten = 3;
FILE_EXISTED = doOpened;
FILE_CREATED = doCreated;
FILE_TRUNCATED = doOverwritten;
@ -669,11 +669,11 @@ const doFail = 0;
contents : Creation flags is 10 hex not 10 dec.
*)
doCreate = 16;
FILE_OPEN = doOpen;
FILE_TRUNCATE = doOverwrite;
FILE_CREATE = doCreate;
{ this nibble applies if file already exists xxxx }
OPEN_ACTION_FAIL_IF_EXISTS =doFail; { ---- ---- ---- 0000 }
OPEN_ACTION_OPEN_IF_EXISTS =doOpen; { ---- ---- ---- 0001 }
@ -713,16 +713,16 @@ const doRead = 0;
OPEN_FLAGS_NO_LOCALITY =$0000; { ---- -000 ---- ---- }
OPEN_FLAGS_SEQUENTIAL =doSequential; { ---- -001 ---- ---- }
OPEN_FLAGS_RANDOM =doRandom; { ---- -010 ---- ---- }
OPEN_FLAGS_RANDOMSEQUENTIAL =doSequential
OPEN_FLAGS_RANDOMSEQUENTIAL =doSequential
or doRandom; { ---- -011 ---- ---- }
OPEN_FLAGS_NO_CACHE =doNoCache; { ---1 ---- ---- ---- }
OPEN_FLAGS_FAIL_ON_ERROR =doFailOnErr; { --1- ---- ---- ---- }
OPEN_FLAGS_WRITE_THROUGH =doWriteThru; { -1-- ---- ---- ---- }
OPEN_FLAGS_DASD =doDASD; { 1--- ---- ---- ---- }
OPEN_FLAGS_NONSPOOLED =$00040000;
OPEN_FLAGS_PROTECTED_HANDLE =$40000000;
{ Open a file.
@ -2826,7 +2826,7 @@ const
{ Logging constants }
ErrLog_Service = 1;
ErrLog_Version = 1;
{ LogRecord status bits }
lf_Bit_ProcName = 1; {used to indicate whether the current error log}
{entry packet contains space in which the error}
@ -2850,7 +2850,7 @@ const
lf_Bit_GetStatus = 64;
lf_Bit_Register = 128;
lf_Bit_Remote_Fail = 256;
type
{ Log entry record header for OS/2 2.x and above used }
{ by 32-bit device drivers and callers of LogAddEntries. }
@ -2885,7 +2885,7 @@ type
end;
LogRecord = TLogRecord;
PLogRecord = ^TLogRecord;
{ Format of buffer sent to LogAddEntries }
TLogEntryRec = record
Version: word; {this version is 1}
@ -2894,7 +2894,7 @@ type
end;
LogEntryRec = TLogEntryRec;
PLogEntryRec = ^TLogEntryRec;
{ Logging facility functions }
{ Open a connection to the system error logging facility (through the system
logging service device driver). }
@ -2914,9 +2914,9 @@ function LogClose (Handle: cardinal): longint; cdecl;
{ Parameters:
Handle - handle returned by previous LogOpen
Service - specifies the class of logging facility:
0 ........... reserved
0 ........... reserved
1 ........... error logging
2 - $FFFF ... reserved
2 - $FFFF ... reserved
LogEntries - buffer containing a variable length error log entry. The first
word of the buffer contains the number of packets in the error log entry.
Multiple error log packets (LogRec structure) can be included within
@ -4346,14 +4346,14 @@ procedure MagicHeaderEnd; assembler; forward;
{$ASMMODE INTEL}
{start of _MSGSEG32 segment}
procedure MagicHeaderStart; assembler;
procedure MagicHeaderStart; assembler;
asm
db $0FF
db $4D,$53,$47,$53,$45,$47,$33,$32, 0 //'MSGSEG32'
dd $8001
dd MAGICHEADEREND
end;
function DosGetMessage(Table:PInsertTable;TableSize:longint;Buf:PChar;
BufSize,MsgNumber:longint;FileName:PChar;
var MsgSize:longint):longint;
@ -4607,13 +4607,17 @@ external 'DOSCALLS' index 425;
{$ASMMODE INTEL}
function SelToFlat (AFarPtr: TFarPtr): pointer; assembler;
asm
{$ifndef REGCALL}
mov eax, AFarPtr
{$endif}
call DosSelToFlat
end;
function FlatToSel (APtr: pointer): cardinal; assembler;
asm
{$ifndef REGCALL}
mov eax, APtr
{$endif}
call DosFlatToSel
end;
@ -4709,7 +4713,10 @@ external 'DOSCALLS' index 582;
end.
{
$Log$
Revision 1.23 2003-11-02 00:25:09 hajny
Revision 1.24 2003-12-04 21:22:38 peter
* regcall updates (untested)
Revision 1.23 2003/11/02 00:25:09 hajny
* TFileFindBuf3 corrected
Revision 1.22 2003/11/01 20:41:47 hajny

View File

@ -24,14 +24,15 @@
for all EMX applications until EMX.DLL is unloaded from memory (i.e.
all applications using this library finish).
*)
unit Ports;
{ This unit uses classes so ObjFpc mode is required. }
{$Mode ObjFpc}
{$calling StdCall}
interface
type
TPort = class
protected
@ -146,7 +147,10 @@ end.
{
$Log$
Revision 1.4 2003-10-18 16:58:39 hajny
Revision 1.5 2003-12-04 21:22:38 peter
* regcall updates (untested)
Revision 1.4 2003/10/18 16:58:39 hajny
* stdcall fixes again
Revision 1.3 2003/10/07 21:26:35 hajny

View File

@ -1062,30 +1062,80 @@ begin
*)
end;
function strcopy(dest,source : pchar) : pchar;assembler;
var
saveeax,saveesi,saveedi : longint;
asm
pushl %esi
pushl %edi
cld
movl 12(%ebp),%edi
movl $0xffffffff,%ecx
xorb %al,%al
repne
scasb
not %ecx
movl 8(%ebp),%edi
movl 12(%ebp),%esi
movl %ecx,%eax
shrl $2,%ecx
rep
movsl
movl %eax,%ecx
andl $3,%ecx
rep
movsb
movl 8(%ebp),%eax
popl %edi
popl %esi
movl %edi,saveedi
movl %esi,saveesi
{$ifdef REGCALL}
movl %eax,saveeax
movl %edx,%edi
{$else}
movl source,%edi
{$endif}
testl %edi,%edi
jz .LStrCopyDone
leal 3(%edi),%ecx
andl $-4,%ecx
movl %edi,%esi
subl %edi,%ecx
{$ifdef REGCALL}
movl %eax,%edi
{$else}
movl dest,%edi
{$endif}
jz .LStrCopyAligned
.LStrCopyAlignLoop:
movb (%esi),%al
incl %edi
incl %esi
testb %al,%al
movb %al,-1(%edi)
jz .LStrCopyDone
decl %ecx
jnz .LStrCopyAlignLoop
.balign 16
.LStrCopyAligned:
movl (%esi),%eax
movl %eax,%edx
leal 0x0fefefeff(%eax),%ecx
notl %edx
addl $4,%esi
andl %edx,%ecx
andl $0x080808080,%ecx
jnz .LStrCopyEndFound
movl %eax,(%edi)
addl $4,%edi
jmp .LStrCopyAligned
.LStrCopyEndFound:
testl $0x0ff,%eax
jz .LStrCopyByte
testl $0x0ff00,%eax
jz .LStrCopyWord
testl $0x0ff0000,%eax
jz .LStrCopy3Bytes
movl %eax,(%edi)
jmp .LStrCopyDone
.LStrCopy3Bytes:
xorb %dl,%dl
movw %ax,(%edi)
movb %dl,2(%edi)
jmp .LStrCopyDone
.LStrCopyWord:
movw %ax,(%edi)
jmp .LStrCopyDone
.LStrCopyByte:
movb %al,(%edi)
.LStrCopyDone:
{$ifdef REGCALL}
movl saveeax,%eax
{$else}
movl dest,%eax
{$endif}
movl saveedi,%edi
movl saveesi,%esi
end;
@ -1388,7 +1438,10 @@ begin
end.
{
$Log$
Revision 1.60 2003-11-23 07:21:16 yuri
Revision 1.61 2003-12-04 21:22:38 peter
* regcall updates (untested)
Revision 1.60 2003/11/23 07:21:16 yuri
* native heap
Revision 1.59 2003/11/19 18:21:11 yuri