瀏覽代碼

+ add memory barrier routines for powerpc/64

git-svn-id: trunk@8179 -
micha 18 年之前
父節點
當前提交
7475f656f8
共有 3 個文件被更改,包括 56 次插入0 次删除
  1. 16 0
      rtl/inc/generic.inc
  2. 20 0
      rtl/powerpc/powerpc.inc
  3. 20 0
      rtl/powerpc64/powerpc64.inc

+ 16 - 0
rtl/inc/generic.inc

@@ -1573,3 +1573,19 @@ function NtoLE(const AValue: QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
       Result := SwapEndian(AValue);
       Result := SwapEndian(AValue);
     {$ENDIF}
     {$ENDIF}
   end;
   end;
+
+{$ifndef FPC_SYSTEM_HAS_MEM_BARRIER}
+
+procedure ReadBarrier;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+end;
+
+procedure ReadWriteBarrier;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+end;
+
+procedure WriteBarrier;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+end;
+
+{$endif}

+ 20 - 0
rtl/powerpc/powerpc.inc

@@ -1253,3 +1253,23 @@ begin
   softfloat_exception_mask:=float_flag_underflow or float_flag_inexact or float_flag_denormal;
   softfloat_exception_mask:=float_flag_underflow or float_flag_inexact or float_flag_denormal;
 end;
 end;
 {$ENDIF}
 {$ENDIF}
+
+{$ifndef FPC_SYSTEM_HAS_MEM_BARRIER}
+{$define FPC_SYSTEM_HAS_MEM_BARRIER}
+
+procedure ReadBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
+asm
+  sync
+end;
+
+procedure ReadWriteBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
+asm
+  sync
+end;
+
+procedure WriteBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
+asm
+  eieio
+end;
+
+{$endif}

+ 20 - 0
rtl/powerpc64/powerpc64.inc

@@ -836,3 +836,23 @@ asm
   bne .LInterlockedCompareExchangeLoop
   bne .LInterlockedCompareExchangeLoop
   mr     r3, r6
   mr     r3, r6
 end;
 end;
+
+{$ifndef FPC_SYSTEM_HAS_MEM_BARRIER}
+{$define FPC_SYSTEM_HAS_MEM_BARRIER}
+
+procedure ReadBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
+asm
+  sync
+end;
+
+procedure ReadWriteBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
+asm
+  sync
+end;
+
+procedure WriteBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
+asm
+  eieio
+end;
+
+{$endif}