Răsfoiți Sursa

* register calling updates

peter 22 ani în urmă
părinte
comite
23ae4449ec
3 a modificat fișierele cu 62 adăugiri și 52 ștergeri
  1. 16 23
      rtl/i386/set.inc
  2. 38 24
      rtl/i386/strings.inc
  3. 8 5
      rtl/i386/strpas.inc

+ 16 - 23
rtl/i386/set.inc

@@ -324,9 +324,9 @@ asm
         movl    %edi,saveedi
         movl    %esi,saveesi
 {$ifdef REGCALL}
-        movl    %eax,%edi
-        movl    %edx,%esi
-        movl    %ecx,%edx
+        movl    set1,%esi
+        movl    __RESULT,%edi
+        movl    set2,%edx
 {$else}
       movl set1,%esi
       movl set2,%edx
@@ -365,9 +365,9 @@ asm
         movl    %edi,saveedi
         movl    %esi,saveesi
 {$ifdef REGCALL}
-        movl    %eax,%edi
-        movl    %edx,%esi
-        movl    %ecx,%edx
+        movl    set1,%esi
+        movl    __RESULT,%edi
+        movl    set2,%edx
 {$else}
       movl set1,%esi
       movl set2,%edx
@@ -407,9 +407,9 @@ asm
         movl    %esi,saveesi
         movl    %ebx,saveebx
 {$ifdef REGCALL}
-        movl    %eax,%edi
-        movl    %edx,%esi
-        movl    %ecx,%edx
+        movl    set1,%esi
+        movl    __RESULT,%edi
+        movl    set2,%edx
 {$else}
         movl set1,%esi
         movl set2,%ebx
@@ -451,9 +451,9 @@ asm
         movl    %edi,saveedi
         movl    %esi,saveesi
 {$ifdef REGCALL}
-        movl    %eax,%edi
-        movl    %edx,%esi
-        movl    %ecx,%edx
+        movl    set1,%esi
+        movl    __RESULT,%edi
+        movl    set2,%edx
 {$else}
         movl set1,%esi
         movl set2,%edx
@@ -487,13 +487,8 @@ var
 asm
         movl    %edi,saveedi
         movl    %esi,saveesi
-{$ifdef REGCALL}
-        movl    %eax,%esi
-        movl    %edx,%edi
-{$else}
         movl set1,%esi
         movl set2,%edi
-{$endif}
         movl $8,%ecx
     .LMCOMPSETS1:
         movl (%esi),%eax
@@ -526,13 +521,8 @@ var
 asm
         movl    %edi,saveedi
         movl    %esi,saveesi
-{$ifdef REGCALL}
-        movl    %eax,%esi
-        movl    %edx,%edi
-{$else}
         movl set1,%esi
         movl set2,%edi
-{$endif}
         movl $8,%ecx
     .LMCONTAINSSETS1:
         movl (%esi),%eax
@@ -720,7 +710,10 @@ end;
 
 {
   $Log$
-  Revision 1.12  2003-11-11 21:08:17  peter
+  Revision 1.13  2003-11-23 16:50:49  peter
+    * register calling updates
+
+  Revision 1.12  2003/11/11 21:08:17  peter
     * REGCALL define added
 
   Revision 1.11  2003/09/08 18:21:37  peter

+ 38 - 24
rtl/i386/strings.inc

@@ -25,11 +25,11 @@ asm
         movl    %edi,saveedi
         movl    %esi,saveesi
 {$ifdef REGCALL}
-	movl	%eax,saveeax
-	movl	%edx,%edi
-{$else}	
+        movl    %eax,saveeax
+        movl    %edx,%edi
+{$else}
         movl    source,%edi
-{$endif}	
+{$endif}
         testl   %edi,%edi
         jz      .LStrCopyDone
         leal    3(%edi),%ecx
@@ -37,10 +37,10 @@ asm
         movl    %edi,%esi
         subl    %edi,%ecx
 {$ifdef REGCALL}
-	movl	%eax,%edi
-{$else}		
+        movl    %eax,%edi
+{$else}
         movl    dest,%edi
-{$endif}	
+{$endif}
         jz      .LStrCopyAligned
 .LStrCopyAlignLoop:
         movb    (%esi),%al
@@ -85,10 +85,10 @@ asm
         movb    %al,(%edi)
 .LStrCopyDone:
 {$ifdef REGCALL}
-	movl	saveeax,%eax
-{$else}	
+        movl    saveeax,%eax
+{$else}
         movl    dest,%eax
-{$endif}	
+{$endif}
         movl    saveedi,%edi
         movl    saveesi,%esi
 end;
@@ -102,13 +102,14 @@ asm
         movl    %edi,saveedi
         movl    %esi,saveesi
         cld
+        movl    dest,%esi
         movl    source,%edi
         movl    $0xffffffff,%ecx
         xorl    %eax,%eax
         repne
         scasb
         not     %ecx
-        movl    dest,%edi
+        movl    %esi,%edi
         movl    source,%esi
         movl    %ecx,%eax
         shrl    $2,%ecx
@@ -118,11 +119,10 @@ asm
         andl    $3,%ecx
         rep
         movsb
-        movl    dest,%eax
         decl    %edi
         movl    %edi,%eax
-        movl    %edi,saveedi
-        movl    %esi,saveesi
+        movl    saveedi,%edi
+        movl    saveesi,%esi
 end;
 
 
@@ -169,8 +169,8 @@ var
 asm
         movl    %edi,saveedi
         cld
-        xorl    %eax,%eax
         movl    p,%edi
+        xorl    %eax,%eax
         orl     %edi,%edi
         jz      .LStrEndNil
         movl    $0xffffffff,%ecx
@@ -340,7 +340,9 @@ var
 asm
         movl    %edi,saveedi
         movl    %esi,saveesi
+{$ifndef REGCALL}
         movl    p,%eax
+{$endif}
         xorl    %ecx,%ecx
         testl   %eax,%eax
         jz      .LSTRSCAN
@@ -348,7 +350,7 @@ asm
         movb    c,%cl
         leal    3(%eax),%esi
         andl    $-4,%esi
-        movl    p,%edi
+        movl    %eax,%edi
         subl    %eax,%esi
         jz      .LSTRSCANALIGNED
         xorl    %eax,%eax
@@ -461,11 +463,12 @@ end;
 {$define FPC_UNIT_HAS_STRRSCAN}
 function strrscan(p : pchar;c : char) : pchar;assembler;
 var
-  saveedi : longint;
+  saveeax,saveedi : longint;
 asm
         movl    %edi,saveedi
-        xorl    %eax,%eax
+        movl    %eax,saveeax
         movl    p,%edi
+        xorl    %eax,%eax
         orl     %edi,%edi
         jz      .LSTRRSCAN
         movl    $0xffffffff,%ecx
@@ -475,7 +478,7 @@ asm
         scasb
         not     %ecx
         movb    c,%al
-        movl    p,%edi
+        movl    saveeax,%edi
         addl    %ecx,%edi
         decl    %edi
         std
@@ -494,10 +497,14 @@ end;
 {$define FPC_UNIT_HAS_STRUPPER}
 function strupper(p : pchar) : pchar;assembler;
 var
-  saveesi,saveedi : longint;
+  saveeax,saveesi,saveedi : longint;
 asm
         movl    %edi,saveedi
         movl    %esi,saveesi
+{$ifndef REGCALL}
+        movl    p,%eax
+{$endif}
+        movl    %eax,saveeax
         movl    p,%esi
         orl     %esi,%esi
         jz      .LStrUpperNil
@@ -514,7 +521,7 @@ asm
         orb     %al,%al
         jnz     .LSTRUPPER1
 .LStrUpperNil:
-        movl    p,%eax
+        movl    saveeax,%eax
         movl    saveedi,%edi
         movl    saveesi,%esi
 end;
@@ -523,10 +530,14 @@ end;
 {$define FPC_UNIT_HAS_STRLOWER}
 function strlower(p : pchar) : pchar;assembler;
 var
-  saveesi,saveedi : longint;
+  saveeax,saveesi,saveedi : longint;
 asm
         movl    %esi,saveesi
         movl    %edi,saveedi
+{$ifndef REGCALL}
+        movl    p,%eax
+{$endif}
+        movl    %eax,saveeax
         movl    p,%esi
         orl     %esi,%esi
         jz      .LStrLowerNil
@@ -543,14 +554,17 @@ asm
         orb     %al,%al
         jnz     .LSTRLOWER1
 .LStrLowerNil:
-        movl    p,%eax
+        movl    saveeax,%eax
         movl    saveedi,%edi
         movl    saveesi,%esi
 end;
 
 {
   $Log$
-  Revision 1.10  2003-11-11 21:08:17  peter
+  Revision 1.11  2003-11-23 16:50:49  peter
+    * register calling updates
+
+  Revision 1.10  2003/11/11 21:08:17  peter
     * REGCALL define added
 
   Revision 1.9  2003/09/08 18:21:37  peter

+ 8 - 5
rtl/i386/strpas.inc

@@ -22,7 +22,7 @@ asm
 {$ifdef regcall}
         movl    p,%esi
         movl    __RESULT,%edi
-        movl    __RESULT,saveres
+        movl    %edi,saveres
 {$else}
         movl    p,%esi
 {$endif}
@@ -102,15 +102,18 @@ asm
 {$endif}
         addb    $255,%cl
         movb    %cl,(%edi)
-        movl    %esi,saveesi
-        movl    %edi,saveedi
-        movl    %ebx,saveebx
+        movl    saveesi,%esi
+        movl    saveedi,%edi
+        movl    saveebx,%ebx
 end;
 
 
 {
   $Log$
-  Revision 1.4  2003-11-19 16:58:44  peter
+  Revision 1.5  2003-11-23 16:50:49  peter
+    * register calling updates
+
+  Revision 1.4  2003/11/19 16:58:44  peter
     * make strpas assembler function
 
   Revision 1.3  2003/11/11 21:08:17  peter