浏览代码

* Reverted r17343, and IFDEF'ed out the newer assembler procedures for FreeBSD for now. They require fixes to assembler writer, and after it's done they still have to be disabled during bootstrapping.

git-svn-id: trunk@17347 -
sergei 14 年之前
父节点
当前提交
576250bc5b
共有 1 个文件被更改,包括 32 次插入24 次删除
  1. 32 24
      rtl/x86_64/x86_64.inc

+ 32 - 24
rtl/x86_64/x86_64.inc

@@ -72,6 +72,12 @@ asm
 .Lg_a_null:
 .Lg_a_null:
 end ['RAX'];
 end ['RAX'];
 
 
+// The following assembler procedures are disabled for FreeBSD due to
+// multiple issues with its old GNU assembler (Mantis #19188).
+// Even after fixing them, it can be enabled only for the trunk version,
+// otherwise bootstrapping won't be possible.
+{$ifndef freebsd}
+
 {$ifndef FPC_SYSTEM_HAS_MOVE}
 {$ifndef FPC_SYSTEM_HAS_MOVE}
 {$define FPC_SYSTEM_HAS_MOVE}
 {$define FPC_SYSTEM_HAS_MOVE}
 procedure Move(const source;var dest;count:SizeInt);[public, alias: 'FPC_MOVE'];assembler;nostackframe;
 procedure Move(const source;var dest;count:SizeInt);[public, alias: 'FPC_MOVE'];assembler;nostackframe;
@@ -195,23 +201,23 @@ asm
     add    $64, %rdx
     add    $64, %rdx
     mov    -64(%rcx,%rdx,1), %r9
     mov    -64(%rcx,%rdx,1), %r9
     mov    -56(%rcx,%rdx,1), %r10
     mov    -56(%rcx,%rdx,1), %r10
-    movntiq %r9, -64(%rdx)
-    movntiq %r10, -56(%rdx)
+    movnti %r9, -64(%rdx)
+    movnti %r10, -56(%rdx)
 
 
     mov    -48(%rcx,%rdx,1), %r9
     mov    -48(%rcx,%rdx,1), %r9
     mov    -40(%rcx,%rdx,1), %r10
     mov    -40(%rcx,%rdx,1), %r10
-    movntiq %r9, -48(%rdx)
-    movntiq %r10, -40(%rdx)
+    movnti %r9, -48(%rdx)
+    movnti %r10, -40(%rdx)
     dec    %eax
     dec    %eax
     mov    -32(%rcx,%rdx,1), %r9
     mov    -32(%rcx,%rdx,1), %r9
     mov    -24(%rcx,%rdx,1), %r10
     mov    -24(%rcx,%rdx,1), %r10
-    movntiq %r9, -32(%rdx)
-    movntiq %r10, -24(%rdx)
+    movnti %r9, -32(%rdx)
+    movnti %r10, -24(%rdx)
 
 
     mov    -16(%rcx,%rdx,1), %r9
     mov    -16(%rcx,%rdx,1), %r9
     mov    -8(%rcx,%rdx,1), %r10
     mov    -8(%rcx,%rdx,1), %r10
-    movntiq %r9, -16(%rdx)
-    movntiq %r10, -8(%rdx)
+    movnti %r9, -16(%rdx)
+    movnti %r10, -8(%rdx)
     jne    .Loop64
     jne    .Loop64
 
 
     sub    $0x1000, %r8
     sub    $0x1000, %r8
@@ -323,23 +329,23 @@ asm
     sub    $64, %rdx
     sub    $64, %rdx
     mov    56(%rcx,%rdx,1), %r9
     mov    56(%rcx,%rdx,1), %r9
     mov    48(%rcx,%rdx,1), %r10
     mov    48(%rcx,%rdx,1), %r10
-    movntiq %r9, 56(%rdx)
-    movntiq %r10, 48(%rdx)
+    movnti %r9, 56(%rdx)
+    movnti %r10, 48(%rdx)
 
 
     mov    40(%rcx,%rdx,1), %r9
     mov    40(%rcx,%rdx,1), %r9
     mov    32(%rcx,%rdx,1), %r10
     mov    32(%rcx,%rdx,1), %r10
-    movntiq %r9, 40(%rdx)
-    movntiq %r10, 32(%rdx)
+    movnti %r9, 40(%rdx)
+    movnti %r10, 32(%rdx)
     dec    %eax
     dec    %eax
     mov    24(%rcx,%rdx,1), %r9
     mov    24(%rcx,%rdx,1), %r9
     mov    16(%rcx,%rdx,1), %r10
     mov    16(%rcx,%rdx,1), %r10
-    movntiq %r9, 24(%rdx)
-    movntiq %r10, 16(%rdx)
+    movnti %r9, 24(%rdx)
+    movnti %r10, 16(%rdx)
 
 
     mov    8(%rcx,%rdx,1), %r9
     mov    8(%rcx,%rdx,1), %r9
     mov    (%rcx,%rdx,1), %r10
     mov    (%rcx,%rdx,1), %r10
-    movntiq %r9, 8(%rdx)
-    movntiq %r10, (%rdx)
+    movnti %r9, 8(%rdx)
+    movnti %r10, (%rdx)
     jne    .Lloop64b
     jne    .Lloop64b
 
 
     sub    $0x1000, %r8
     sub    $0x1000, %r8
@@ -451,15 +457,15 @@ Procedure FillChar(var x;count:SizeInt;value:byte);assembler;nostackframe;
     .balign 16
     .balign 16
 .Lloop64nti:
 .Lloop64nti:
     add    $64, %rcx
     add    $64, %rcx
-    movntiq %r8, -64(%rcx)
-    movntiq %r8, -56(%rcx)
-    movntiq %r8, -48(%rcx)
-    movntiq %r8, -40(%rcx)
+    movnti %r8, -64(%rcx)
+    movnti %r8, -56(%rcx)
+    movnti %r8, -48(%rcx)
+    movnti %r8, -40(%rcx)
     dec    %rax
     dec    %rax
-    movntiq %r8, -32(%rcx)
-    movntiq %r8, -24(%rcx)
-    movntiq %r8, -16(%rcx)
-    movntiq %r8, -8(%rcx)
+    movnti %r8, -32(%rcx)
+    movnti %r8, -24(%rcx)
+    movnti %r8, -16(%rcx)
+    movnti %r8, -8(%rcx)
     jnz    .Lloop64nti
     jnz    .Lloop64nti
     mfence
     mfence
     jmp    .Lless64
     jmp    .Lless64
@@ -627,6 +633,8 @@ asm
 end;
 end;
 {$endif FPC_SYSTEM_HAS_INDEXWORD}
 {$endif FPC_SYSTEM_HAS_INDEXWORD}
 
 
+{$endif freebsd}
+
 {$asmmode att}
 {$asmmode att}
 {$define FPC_SYSTEM_HAS_DECLOCKED_LONGINT}
 {$define FPC_SYSTEM_HAS_DECLOCKED_LONGINT}
 { does a thread save inc/dec }
 { does a thread save inc/dec }