|
@@ -617,3 +617,28 @@ begin
|
|
|
softfloat_exception_flags:=0;
|
|
|
softfloat_exception_mask:=float_flag_underflow or float_flag_inexact or float_flag_denormal;
|
|
|
end;
|
|
|
+
|
|
|
+{$ifndef FPC_SYSTEM_HAS_MEM_BARRIER}
|
|
|
+{$define FPC_SYSTEM_HAS_MEM_BARRIER}
|
|
|
+
|
|
|
+procedure ReadBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
|
|
|
+asm
|
|
|
+ lfence
|
|
|
+end;
|
|
|
+
|
|
|
+procedure ReadDependencyBarrier;{$ifdef SYSTEMINLINE}inline;{$endif}
|
|
|
+asm
|
|
|
+ { reads imply barrier on earlier reads depended on }
|
|
|
+end;
|
|
|
+
|
|
|
+procedure ReadWriteBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
|
|
|
+asm
|
|
|
+ mfence
|
|
|
+end;
|
|
|
+
|
|
|
+procedure WriteBarrier;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
|
|
|
+asm
|
|
|
+ { no write reordering on intel CPUs (yet) }
|
|
|
+end;
|
|
|
+
|
|
|
+{$endif}
|