Browse Source

* stdcall fixes and asm routines cleanup

Tomas Hajny 22 years ago
parent
commit
b5ac7cde64
5 changed files with 131 additions and 120 deletions
  1. 10 7
      rtl/os2/ports.pas
  2. 24 31
      rtl/os2/system.pas
  3. 45 39
      rtl/os2/sysutils.pp
  4. 7 3
      rtl/os2/thread.inc
  5. 45 40
      rtl/os2/video.pp

+ 10 - 7
rtl/os2/ports.pas

@@ -83,7 +83,7 @@ asm
  movw P, %dx
  movb Data, %al
  outb %al, %dx
-end;
+end ['eax', 'ecx', 'edx'];
 
 function TPort.ReadPort (P: word): byte; assembler;
 asm
@@ -94,7 +94,7 @@ asm
  call syscall
  movw P, %dx
  inb %dx, %al
-end;
+end ['eax', 'ecx', 'edx'];
 
 procedure TPortW.WritePort (P: word; Data : word); assembler;
 asm
@@ -106,7 +106,7 @@ asm
  movw P, %dx
  movw Data, %ax
  outw %ax, %dx
-end;
+end ['eax', 'ecx', 'edx'];
 
 function TPortW.ReadPort (P: word): word; assembler;
 asm
@@ -117,7 +117,7 @@ asm
  call syscall
  movw P, %dx
  inw %dx, %ax
-end;
+end ['eax', 'ecx', 'edx'];
 
 procedure TPortL.WritePort (P: word; Data: longint); assembler;
 asm
@@ -129,7 +129,7 @@ asm
  movw P, %dx
  movl Data, %eax
  outl %eax, %dx
-end;
+end ['eax', 'ecx', 'edx'];
 
 function TPortL.ReadPort (P: word): longint; assembler;
 asm
@@ -140,13 +140,16 @@ asm
  call syscall
  movw P, %dx
  inl %dx, %eax
-end;
+end ['eax', 'ecx', 'edx'];
 
 end.
 
 {
   $Log$
-  Revision 1.2  2002-09-07 16:01:25  peter
+  Revision 1.3  2003-10-07 21:26:35  hajny
+    * stdcall fixes and asm routines cleanup
+
+  Revision 1.2  2002/09/07 16:01:25  peter
     * old logs removed and tabs fixed
 
 }

+ 24 - 31
rtl/os2/system.pas

@@ -413,7 +413,7 @@ begin
       mov ecx, 260
       mov eax, 7F33h
       call syscall    { error handle already with empty string }
-    end;
+            end ['eax', 'ecx', 'edx'];
     ParamStr := StrPas (PChar (P));
     FreeMem (P, 260);
   end
@@ -433,7 +433,7 @@ asm
     call syscall
     mov word ptr [randseed], cx
     mov word ptr [randseed + 2], dx
-end;
+end ['eax', 'ecx', 'edx'];
 
 {$ASMMODE ATT}
 
@@ -461,7 +461,7 @@ begin
     movw $0x7f00,%ax
     call syscall     { result directly in EAX }
     mov  %eax,L
-  end;
+  end ['eax', 'edx'];
   WriteLn ('New heap at ', L);
   Sbrk := pointer(L);
 end;
@@ -471,7 +471,7 @@ asm
     movl size,%edx
     movw $0x7f00,%ax
     call syscall     { result directly in EAX }
-end;
+end ['eax', 'edx'];
 {$ENDIF DUMPGROW}
 
 function getheapstart:pointer;assembler;
@@ -519,7 +519,7 @@ begin
         movw  %ax, InOutRes       { yes, then set InOutRes }
      .Lnoerror:
         popl %ebx
-     end;
+     end ['eax'];
    end;
 end;
 
@@ -538,7 +538,6 @@ end;
 
 function do_read(h,addr,len:longint):longint; assembler;
 asm
-    pushl %ebx
     movl len,%ecx
     movl addr,%edx
     movl h,%ebx
@@ -548,12 +547,10 @@ asm
     movw %ax,inoutres;
     xorl %eax,%eax
 .LDOSREAD1:
-    popl %ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 function do_write(h,addr,len:longint) : longint; assembler;
 asm
-    pushl %ebx
     xorl %eax,%eax
     cmpl $0,len    { 0 bytes to write is undefined behavior }
     jz   .LDOSWRITE1
@@ -565,12 +562,10 @@ asm
     jnc .LDOSWRITE1
     movw %ax,inoutres;
 .LDOSWRITE1:
-    popl %ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 function do_filepos(handle:longint): longint; assembler;
 asm
-    pushl %ebx
     movw $0x4201,%ax
     movl handle,%ebx
     xorl %edx,%edx
@@ -579,12 +574,10 @@ asm
     movw %ax,inoutres;
     xorl %eax,%eax
 .LDOSFILEPOS:
-    popl %ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 procedure do_seek(handle,pos:longint); assembler;
 asm
-    pushl %ebx
     movw $0x4200,%ax
     movl handle,%ebx
     movl pos,%edx
@@ -592,12 +585,10 @@ asm
     jnc .LDOSSEEK1
     movw %ax,inoutres;
 .LDOSSEEK1:
-    popl %ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 function do_seekend(handle:longint):longint; assembler;
 asm
-    pushl %ebx
     movw $0x4202,%ax
     movl handle,%ebx
     xorl %edx,%edx
@@ -606,8 +597,7 @@ asm
     movw %ax,inoutres;
     xorl %eax,%eax
 .Lset_at_end1:
-    popl %ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 function do_filesize(handle:longint):longint;
 
@@ -621,7 +611,6 @@ end;
 
 procedure do_truncate(handle,pos:longint); assembler;
 asm
-    pushl %ebx
 (* DOS function 40h isn't safe for this according to EMX documentation *)
     movl $0x7F25,%eax
     movl Handle,%ebx
@@ -639,8 +628,7 @@ asm
 .LTruncate1:
     movw %ax,inoutres;
 .LTruncate2:
-    popl %ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 const
     FileHandleCount: longint = 20;
@@ -722,6 +710,7 @@ begin
     if Flags and 112 = 0 then
         Action := Action or 64;
     asm
+        pushl %ebx
         movl $0x7f2b, %eax
         movl Action, %ecx
         movl p, %edx
@@ -733,7 +722,8 @@ begin
 .LOPEN1:
         movl f,%edx         { Warning : This assumes Handle is first }
         movw %ax,(%edx)     { field of FileRec                       }
-    end;
+        popl %ebx
+    end ['eax', 'ecx', 'edx'];
     if (InOutRes = 4) and Increase_File_Handle_Count then
 (* Trying again after increasing amount of file handles *)
         asm
@@ -748,7 +738,7 @@ begin
 .LOPEN2:
             movl f,%edx
             movw %ax,(%edx)
-        end;
+        end ['eax', 'ecx', 'edx'];
       { for systems that have more handles }
     if FileRec (F).Handle > FileHandleCount then
         FileHandleCount := FileRec (F).Handle;
@@ -765,10 +755,13 @@ function do_isdevice (Handle: longint): boolean; assembler;
 (*
 var HT, Attr: longint;
 begin
+    if os_mode = osOS2 then
+        begin
   if DosQueryHType (Handle, HT, Attr) <> 0 then HT := 1;
+        end
+    else
 *)
 asm
-    push ebx
     mov ebx, Handle
     mov eax, 4400h
     call syscall
@@ -778,8 +771,7 @@ asm
     jnz @IsDevEnd
     dec eax                 { nope, so result is zero }
 @IsDevEnd:
-    pop ebx
-end;
+end ['eax', 'ebx', 'edx'];
 {$ASMMODE ATT}
 
 
@@ -1094,7 +1086,6 @@ begin
     os_mode:=OsOs2;
 {$ASMMODE INTEL}
     asm
-        push ebx
     {Enable the brk area by initializing it with the initial heap size.}
         mov eax, 7F01h
         mov edx, heap_brk
@@ -1121,7 +1112,6 @@ begin
         mov edx, 8
         call syscall
 {$ENDIF CONTHEAP}
-        pop ebx
     end;
 
     {Now request, if we are running under DOS,
@@ -1160,7 +1150,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.39  2003-10-06 16:58:27  yuri
+  Revision 1.40  2003-10-07 21:26:35  hajny
+    * stdcall fixes and asm routines cleanup
+
+  Revision 1.39  2003/10/06 16:58:27  yuri
   * Another set of native functions.
 
   Revision 1.38  2003/10/06 14:22:40  yuri

+ 45 - 39
rtl/os2/sysutils.pp

@@ -256,10 +256,12 @@ begin
 {$ENDIF}
         call syscall
 {$IFOPT H-}
-        mov [ebp - 4], eax
-    end;
+        mov Result, eax
 {$ENDIF}
+    end ['eax', 'ebx', 'ecx', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 function FileCreate (const FileName: string): longint;
@@ -281,10 +283,12 @@ begin
 {$ENDIF}
         call syscall
 {$IFOPT H-}
-        mov [ebp - 4], eax
-    end;
+        mov Result, eax
 {$ENDIF}
+    end ['eax', 'ebx', 'ecx', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 Function FileCreate (Const FileName : String; Mode:longint) : Longint;
@@ -296,7 +300,6 @@ end;
 function FileRead (Handle: longint; var Buffer; Count: longint): longint;
                                                                      assembler;
 asm
-    push ebx
     mov eax, 3F00h
     mov ebx, Handle
     mov ecx, Count
@@ -305,14 +308,12 @@ asm
     jnc @FReadEnd
     mov eax, -1
 @FReadEnd:
-    pop ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 
 function FileWrite (Handle: longint; const Buffer; Count: longint): longint;
                                                                      assembler;
 asm
-    push ebx
     mov eax, 4000h
     mov ebx, Handle
     mov ecx, Count
@@ -321,13 +322,11 @@ asm
     jnc @FWriteEnd
     mov eax, -1
 @FWriteEnd:
-    pop ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 
 function FileSeek (Handle, FOffset, Origin: longint): longint; assembler;
 asm
-    push ebx
     mov eax, Origin
     mov ah, 42h
     mov ebx, Handle
@@ -336,8 +335,7 @@ asm
     jnc @FSeekEnd
     mov eax, -1
 @FSeekEnd:
-    pop ebx
-end;
+end ['eax', 'ebx', 'edx'];
 
 Function FileSeek (Handle : Longint; FOffset,Origin : Int64) : Int64;
 begin
@@ -354,13 +352,12 @@ begin
             mov ebx, Handle
             call syscall
             pop ebx
-        end;
+        end ['eax'];
 end;
 
 
 function FileTruncate (Handle, Size: longint): boolean; assembler;
 asm
-    push ebx
     mov eax, 7F25h
     mov ebx, Handle
     mov edx, Size
@@ -374,8 +371,7 @@ asm
     jnc @FTruncEnd
     dec eax
 @FTruncEnd:
-    pop ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 
 function FileAge (const FileName: string): longint;
@@ -416,9 +412,12 @@ asm
     inc eax
 @FExistsEnd:
 {$IFOPT H-}
-end;
+    mov Result, eax
 {$ENDIF}
+end ['eax', 'ecx', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 type    TRec = record
@@ -543,7 +542,6 @@ end;
 
 function FileGetDate (Handle: longint): longint; assembler;
 asm
-    push ebx
     mov ax, 5700h
     mov ebx, Handle
     call syscall
@@ -552,8 +550,7 @@ asm
     mov ax, dx
     shld eax, ecx, 16
 @FGetDateEnd:
-    pop ebx
-end;
+end ['eax', 'ebx', 'ecx', 'edx'];
 
 
 function FileSetDate (Handle, Age: longint): longint;
@@ -593,9 +590,9 @@ begin
             jnc @FSetDateEnd
             mov eax, -1
 @FSetDateEnd:
-            mov [ebp - 4], eax
+            mov Result, eax
             pop ebx
-        end;
+        end ['eax', 'ecx', 'edx'];
 end;
 
 
@@ -620,10 +617,12 @@ asm
     mov eax, -1
 @FGetAttrEnd:
 {$IFOPT H-}
-    mov [ebp - 4], eax
-end;
+    mov Result, eax
 {$ENDIF}
+  end ['eax', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 function FileSetAttr (const Filename: string; Attr: longint): longint;
@@ -649,10 +648,12 @@ asm
     mov eax, -1
 @FSetAttrEnd:
 {$IFOPT H-}
-    mov [ebp - 4], eax
-end;
+    mov Result, eax
 {$ENDIF}
+end ['eax', 'ecx', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 function DeleteFile (const FileName: string): boolean;
@@ -677,10 +678,12 @@ asm
     inc eax
 @FDeleteEnd:
 {$IFOPT H-}
-    mov [ebp - 4], eax
-end;
+    mov Result, eax
 {$ENDIF}
+  end ['eax', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 function RenameFile (const OldName, NewName: string): boolean;
@@ -693,7 +696,6 @@ begin
     FN2 := NewName + #0;
 {$ENDIF}
 asm
-    push edi
     mov ax, 5600h
 {$IFOPT H+}
     mov edx, OldName
@@ -710,11 +712,12 @@ asm
     inc eax
 @FRenameEnd:
 {$IFOPT H-}
-    mov [ebp - 4], eax
-    pop edi
-end;
+    mov Result, eax
 {$ENDIF}
+  end ['eax', 'edx', 'edi'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 {****************************************************************************
@@ -865,9 +868,12 @@ asm
     inc eax
 @FExistsEnd:
 {$IFOPT H-}
-end;
+    mov Result, eax
 {$ENDIF}
+  end ['eax', 'ecx', 'edx'];
+{$IFOPT H-}
 end;
+{$ENDIF}
 
 
 {****************************************************************************
@@ -876,7 +882,6 @@ end;
 
 procedure GetLocalTime (var SystemTime: TSystemTime); assembler;
 asm
-    push edi
 (* Expects the default record alignment (word)!!! *)
     mov ah, 2Ah
     call syscall
@@ -902,11 +907,9 @@ asm
     shl eax, 16
     mov al, dh
     stosd
-    pop edi
-end;
+end ['eax', 'ecx', 'edx', 'edi'];
 {$asmmode default}
 
-
 {****************************************************************************
                               Misc Functions
 ****************************************************************************}
@@ -1009,7 +1012,10 @@ end.
 
 {
   $Log$
-  Revision 1.30  2003-10-03 21:46:41  peter
+  Revision 1.31  2003-10-07 21:26:34  hajny
+    * stdcall fixes and asm routines cleanup
+
+  Revision 1.30  2003/10/03 21:46:41  peter
     * stdcall fixes
 
   Revision 1.29  2003/06/06 23:34:40  hajny

+ 7 - 3
rtl/os2/thread.inc

@@ -189,7 +189,7 @@ begin
   mov eax, 7F2Dh
   mov edx, ThreadID
   call syscall
- end;
+ end ['eax', 'ecx', 'edx'];
 {$ASMMODE DEFAULT}
 {$ENDIF EMX}
 end;
@@ -237,7 +237,8 @@ begin
   mov eax, 7F2Ch
   mov edx, ThreadID
   call syscall
- end;
+{$warning Error checking missing!!}
+ end ['eax', 'ecx', 'edx'];
 {$ASMMODE DEFAULT}
 {$ENDIF EMX}
 end;
@@ -364,7 +365,10 @@ end;
 
 {
   $Log$
-  Revision 1.10  2003-02-20 17:09:49  hajny
+  Revision 1.11  2003-10-07 21:26:35  hajny
+    * stdcall fixes and asm routines cleanup
+
+  Revision 1.10  2003/02/20 17:09:49  hajny
     * fixes for OS/2 v2.1 incompatibility
 
   Revision 1.9  2002/09/07 16:01:25  peter

+ 45 - 40
rtl/os2/video.pp

@@ -356,46 +356,48 @@ var SOfs, CLen: cardinal;
 begin
   if not (Force) then
     asm
-    cld
-    push esi
-    push edi
-    mov esi, VideoBuf
-    mov edi, OldVideoBuf
-    mov eax, VideoBufSize
-    mov ecx, eax
-    shr ecx, 1
-    shr ecx, 1
-    repe
-    cmpsd
-    je @no_update
-    inc ecx
-    mov edx, eax
-    mov ebx, ecx
-    shl ebx, 1
-    shl ebx, 1
-    sub edx, ebx
-    mov SOfs, edx
-    mov Force, 1
-    std
-    mov edi, eax
-    mov esi, VideoBuf
-    add eax, esi
-    sub eax, 4
-    mov esi, eax
-    mov eax, OldVideoBuf
-    add eax, edi
-    sub eax, 4
-    mov edi, eax
-    repe
-    cmpsd
-    inc ecx
-    shl ecx, 1
-    shl ecx, 1
-    mov CLen, ecx
+      push ebx
+      push esi
+      push edi
+      cld
+      mov esi, VideoBuf
+      mov edi, OldVideoBuf
+      mov eax, VideoBufSize
+      mov ecx, eax
+      shr ecx, 1
+      shr ecx, 1
+      repe
+      cmpsd
+      je @no_update
+      inc ecx
+      mov edx, eax
+      mov ebx, ecx
+      shl ebx, 1
+      shl ebx, 1
+      sub edx, ebx
+      mov SOfs, edx
+      mov Force, 1
+      std
+      mov edi, eax
+      mov esi, VideoBuf
+      add eax, esi
+      sub eax, 4
+      mov esi, eax
+      mov eax, OldVideoBuf
+      add eax, edi
+      sub eax, 4
+      mov edi, eax
+      repe
+      cmpsd
+      inc ecx
+      shl ecx, 1
+      shl ecx, 1
+      mov CLen, ecx
 @no_update:
-    pop edi
-    pop esi
-    end
+      pop edi
+      pop esi
+      pop ebx
+    end ['eax', 'ecx', 'edx']
   else
     begin
     SOfs := 0;
@@ -468,7 +470,10 @@ end.
 
 {
   $Log$
-  Revision 1.8  2003-10-03 21:46:41  peter
+  Revision 1.9  2003-10-07 21:26:35  hajny
+    * stdcall fixes and asm routines cleanup
+
+  Revision 1.8  2003/10/03 21:46:41  peter
     * stdcall fixes
 
   Revision 1.7  2002/09/07 16:01:25  peter