Browse Source

* some fixes for widestrings and variants

florian 24 years ago
parent
commit
a4755024cc
2 changed files with 19 additions and 17 deletions
  1. 11 10
      rtl/i386/i386.inc
  2. 8 7
      rtl/i386/rttip.inc

+ 11 - 10
rtl/i386/i386.inc

@@ -1076,47 +1076,49 @@ end;
 
 { do a thread save inc/dec }
 
-procedure declocked(var l : longint);assembler;
+function declocked(var l : longint) : boolean;assembler;
 
   asm
+     movl       l,%edi
 {$ifdef MTRTL}
      { this check should be done because a lock takes a lot }
      { of time!                                             }
      cmpb       $0,IsMultithreaded
      jz         .Ldeclockednolock
-     movl       l,%edi
      lock
      decl       (%edi)
      jmp        .Ldeclockedend
 .Ldeclockednolock:
 {$endif MTRTL}
-     movl       l,%edi
      decl       (%edi);
 .Ldeclockedend:
-  end ['EDI'];
+     setzb      %al
+  end ['EDI','EAX'];
 
 procedure inclocked(var l : longint);assembler;
 
   asm
+     movl       l,%edi
 {$ifdef MTRTL}
      { this check should be done because a lock takes a lot }
      { of time!                                             }
      cmpb       $0,IsMultithreaded
      jz         .Linclockednolock
-     movl       l,%edi
      lock
      incl       (%edi)
      jmp        .Linclockedend
 .Linclockednolock:
 {$endif MTRTL}
-     movl       l,%edi
-     incl       (%edi);
+     incl       (%edi)
 .Linclockedend:
   end ['EDI'];
 
 {
   $Log$
-  Revision 1.11  2001-04-21 12:18:09  peter
+  Revision 1.12  2001-05-31 22:42:56  florian
+    * some fixes for widestrings and variants
+
+  Revision 1.11  2001/04/21 12:18:09  peter
     * add nop after popa (merged)
 
   Revision 1.9  2001/04/08 13:19:28  jonas
@@ -1143,5 +1145,4 @@ procedure inclocked(var l : longint);assembler;
 
   Revision 1.2  2000/07/13 11:33:41  michael
   + removed logs
-
-}
+}

+ 8 - 7
rtl/i386/rttip.inc

@@ -289,11 +289,8 @@ asm
         jmp     .LExitAddRef
         // Dynamic Arrays
 .LDoDynArrayAddRef:
-        movl    Data,%eax
-        orl     %eax,%eax
-        jz      .LExitAddRef
-        lock
-        incl    -8(%eax)
+        pushl    Data
+        call    FPC_DYNARRAY_INCR_REF
         jmp     .LExitAddRef
 .LDoClassAddRef:
 .LDoObjectAddRef:
@@ -406,7 +403,7 @@ asm
 .LDoDynArrayDecRef:
         pushl   TypeInfo
         pushl   Data
-        call    DYNARRAY_DECR_REF
+        call    FPC_DYNARRAY_DECR_REF
         jmp     .LExitDecRef
 .LDoClassDecRef:
 .LDoObjectDecRef:
@@ -476,7 +473,10 @@ end;
 
 {
   $Log$
-  Revision 1.8  2001-04-23 18:25:44  peter
+  Revision 1.9  2001-05-31 22:42:56  florian
+    * some fixes for widestrings and variants
+
+  Revision 1.8  2001/04/23 18:25:44  peter
     * m68k updates
 
   Revision 1.7  2000/11/09 17:49:34  florian
@@ -501,3 +501,4 @@ end;
   Revision 1.2  2000/07/13 11:33:41  michael
   + removed logs
 }
+