فهرست منبع

* split FPC_HAS_INTERNAL_BSX_* defines into FPC_HAS_INTERNAL_BSF_* and FPC_HAS_INTERNAL_BSR_*

git-svn-id: trunk@22308 -
florian 13 سال پیش
والد
کامیت
9be3ca04ad
5فایلهای تغییر یافته به همراه115 افزوده شده و 47 حذف شده
  1. 2 1
      compiler/options.pas
  2. 7 4
      rtl/i386/i386.inc
  3. 24 8
      rtl/inc/generic.inc
  4. 41 17
      rtl/inc/systemh.inc
  5. 41 17
      rtl/java/jsystemh.inc

+ 2 - 1
compiler/options.pas

@@ -2778,7 +2778,8 @@ begin
 
 { inline bsf/bsr implementation }
 {$if defined(x86) or defined(x86_64)}
-  def_system_macro('FPC_HAS_INTERNAL_BSX');
+  def_system_macro('FPC_HAS_INTERNAL_BSF');
+  def_system_macro('FPC_HAS_INTERNAL_BSR');
 {$endif}
 
 {$ifdef powerpc64}

+ 7 - 4
rtl/i386/i386.inc

@@ -1557,8 +1557,8 @@ end;
 
 {$endif}
 
-{$ifndef FPC_SYSTEM_HAS_BSX_QWORD}
-{$define FPC_SYSTEM_HAS_BSX_QWORD}
+{$ifndef FPC_SYSTEM_HAS_BSF_QWORD}
+{$define FPC_SYSTEM_HAS_BSF_QWORD}
 
 function BsfQWord(Const AValue : QWord): cardinal; assembler; nostackframe;
 asm
@@ -1568,7 +1568,11 @@ asm
      add     $32,%eax
 .L2:
 end;
+{$endif FPC_SYSTEM_HAS_BSF_QWORD}
 
+
+{$ifndef FPC_SYSTEM_HAS_BSR_QWORD}
+{$define FPC_SYSTEM_HAS_BSR_QWORD}
 function BsrQWord(Const AValue : QWord): cardinal; assembler; nostackframe;
 asm
      bsrl    8(%esp),%eax
@@ -1578,5 +1582,4 @@ asm
 .L1: bsrl    4(%esp),%eax
 .L2:
 end;
-
-{$endif}
+{$endif FPC_SYSTEM_HAS_BSR_QWORD}

+ 24 - 8
rtl/inc/generic.inc

@@ -2351,8 +2351,8 @@ function fpc_SarInt64(Const AValue : Int64;const Shift : Byte): Int64; [Public,A
 {$endif FPC_HAS_INTERNAL_SAR_QWORD}
 {$endif FPC_SYSTEM_HAS_SAR_QWORD}
 
-{$ifndef FPC_HAS_INTERNAL_BSX_BYTE}
-{$ifndef FPC_SYSTEM_HAS_BSX_BYTE}
+{$ifndef FPC_HAS_INTERNAL_BSF_BYTE}
+{$ifndef FPC_SYSTEM_HAS_BSF_BYTE}
 function BsfByte(Const AValue: Byte): Byte;
   const bsf8bit: array [Byte] of Byte = (
 	  $ff,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
@@ -2367,7 +2367,11 @@ function BsfByte(Const AValue: Byte): Byte;
   begin
     result:=bsf8bit[AValue];
   end;
+{$endif}
+{$endif}
 
+{$ifndef FPC_HAS_INTERNAL_BSR_BYTE}
+{$ifndef FPC_SYSTEM_HAS_BSR_BYTE}
 function BsrByte(Const AValue: Byte): Byte;
   const bsr8bit: array [Byte] of Byte = (
     $ff,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
@@ -2385,8 +2389,8 @@ function BsrByte(Const AValue: Byte): Byte;
 {$endif}
 {$endif}
 
-{$ifndef FPC_SYSTEM_HAS_BSX_WORD}
-{$ifndef FPC_HAS_INTERNAL_BSX_WORD}
+{$ifndef FPC_SYSTEM_HAS_BSF_WORD}
+{$ifndef FPC_HAS_INTERNAL_BSF_WORD}
 function BsfWord(Const AValue: Word): cardinal;
   begin
     if lo(AValue)<>0 then
@@ -2394,7 +2398,11 @@ function BsfWord(Const AValue: Word): cardinal;
     else
       result:=BsfByte(hi(AValue))+8
   end;
+{$endif}
+{$endif}
 
+{$ifndef FPC_SYSTEM_HAS_BSR_WORD}
+{$ifndef FPC_HAS_INTERNAL_BSR_WORD}
 function BsrWord(Const AValue: Word): cardinal;
   begin
     if hi(AValue)<>0 then
@@ -2405,8 +2413,8 @@ function BsrWord(Const AValue: Word): cardinal;
 {$endif}
 {$endif}
 
-{$ifndef FPC_HAS_INTERNAL_BSX_DWORD}
-{$ifndef FPC_SYSTEM_HAS_BSX_DWORD}
+{$ifndef FPC_HAS_INTERNAL_BSF_DWORD}
+{$ifndef FPC_SYSTEM_HAS_BSF_DWORD}
 function BsfDWord(Const AValue : DWord): cardinal;
 begin
   if lo(AValue)<>0 then
@@ -2414,7 +2422,11 @@ begin
   else
     result:=BsfWord(hi(AValue))+16
 end;
+{$endif}
+{$endif}
 
+{$ifndef FPC_HAS_INTERNAL_BSR_DWORD}
+{$ifndef FPC_SYSTEM_HAS_BSR_DWORD}
 function BsrDWord(Const AValue : DWord): cardinal;
 begin
   if hi(AValue)<>0 then
@@ -2425,8 +2437,8 @@ end;
 {$endif}
 {$endif}
 
-{$ifndef FPC_HAS_INTERNAL_BSX_QWORD}
-{$ifndef FPC_SYSTEM_HAS_BSX_QWORD}
+{$ifndef FPC_HAS_INTERNAL_BSF_QWORD}
+{$ifndef FPC_SYSTEM_HAS_BSF_QWORD}
 function BsfQWord(Const AValue : QWord): cardinal;
   begin
     if lo(AValue) <> 0 then
@@ -2434,7 +2446,11 @@ function BsfQWord(Const AValue : QWord): cardinal;
     else
       result:=BsfDWord(hi(AValue)) + 32
   end;
+{$endif}
+{$endif}
 
+{$ifndef FPC_HAS_INTERNAL_BSR_QWORD}
+{$ifndef FPC_SYSTEM_HAS_BSR_QWORD}
 function BsrQWord(Const AValue : QWord): cardinal;
   begin
     if hi(AValue) <> 0 then

+ 41 - 17
rtl/inc/systemh.inc

@@ -817,48 +817,72 @@ function fpc_SarInt64(Const AValue : Int64;const Shift : Byte): Int64;compilerpr
 function SarInt64(Const AValue : Int64;const Shift : Byte = 1): Int64; [external name 'FPC_SARINT64'];
 {$endif FPC_HAS_INTERNAL_SAR_QWORD}
 
-{$ifdef FPC_HAS_INTERNAL_BSX}
+{$ifdef FPC_HAS_INTERNAL_BSF}
 {$if defined(cpui386) or defined(cpux86_64)}
-{$define FPC_HAS_INTERNAL_BSX_BYTE}
-{$define FPC_HAS_INTERNAL_BSX_WORD}
-{$define FPC_HAS_INTERNAL_BSX_DWORD}
+{$define FPC_HAS_INTERNAL_BSF_BYTE}
+{$define FPC_HAS_INTERNAL_BSF_WORD}
+{$define FPC_HAS_INTERNAL_BSF_DWORD}
 {$endif}
 {$if defined(cpux86_64)}
-{$define FPC_HAS_INTERNAL_BSX_QWORD}
+{$define FPC_HAS_INTERNAL_BSF_QWORD}
 {$endif}
 {$endif}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_BYTE}
+{$ifdef FPC_HAS_INTERNAL_BSR}
+{$if defined(cpui386) or defined(cpux86_64)}
+{$define FPC_HAS_INTERNAL_BSR_BYTE}
+{$define FPC_HAS_INTERNAL_BSR_WORD}
+{$define FPC_HAS_INTERNAL_BSR_DWORD}
+{$endif}
+{$if defined(cpux86_64)}
+{$define FPC_HAS_INTERNAL_BSR_QWORD}
+{$endif}
+{$endif}
+
+
+{$ifdef FPC_HAS_INTERNAL_BSF_BYTE}
 function BsfByte(Const AValue: Byte): Byte;[internproc:fpc_in_bsf_x];
-function BsrByte(Const AValue: Byte): Byte;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfByte(Const AValue: Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSF_BYTE}
+{$ifdef FPC_HAS_INTERNAL_BSR_BYTE}
+function BsrByte(Const AValue: Byte): Byte;[internproc:fpc_in_bsr_x];
+{$else}
 function BsrByte(Const AValue: Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
-{$endif}
+{$endif FPC_HAS_INTERNAL_BSR_BYTE}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_WORD}
+{$ifdef FPC_HAS_INTERNAL_BSF_WORD}
 function BsfWord(Const AValue: Word): cardinal;[internproc:fpc_in_bsf_x];
-function BsrWord(Const AValue: Word): cardinal;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfWord(Const AValue: Word): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSF_WORD}
+{$ifdef FPC_HAS_INTERNAL_BSR_WORD}
+function BsrWord(Const AValue: Word): cardinal;[internproc:fpc_in_bsr_x];
+{$else}
 function BsrWord(Const AValue: Word): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
-{$endif}
+{$endif FPC_HAS_INTERNAL_BSR_WORD}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_DWORD}
+{$ifdef FPC_HAS_INTERNAL_BSF_DWORD}
 function BsfDWord(Const AValue : DWord): cardinal;[internproc:fpc_in_bsf_x];
-function BsrDWord(Const AValue : DWord): cardinal;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfDWord(Const AValue : DWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSF_DWORD}
+{$ifdef FPC_HAS_INTERNAL_BSR_DWORD}
+function BsrDWord(Const AValue : DWord): cardinal;[internproc:fpc_in_bsr_x];
+{$else}
 function BsrDWord(Const AValue : DWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
-{$endif FPC_HAS_INTERNAL_BSX_DWORD}
+{$endif FPC_HAS_INTERNAL_BSR_DWORD}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_QWORD}
+{$ifdef FPC_HAS_INTERNAL_BSF_QWORD}
 function BsfQWord(Const AValue : QWord): cardinal;[internproc:fpc_in_bsf_x];
-function BsrQWord(Const AValue : QWord): cardinal;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfQWord(Const AValue : QWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
-function BsrQWord(Const AValue : QWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_BSF_QWORD}
+{$ifdef FPC_HAS_INTERNAL_BSR_QWORD}
+function BsrQWord(Const AValue : QWord): cardinal;[internproc:fpc_in_bsr_x];
+{$else}
+function BsrQWord(Const AValue : QWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSR_QWORD}
 
 function PopCnt(Const AValue: Byte): Byte;[internproc:fpc_in_popcnt_x];
 function PopCnt(Const AValue: Word): Word;[internproc:fpc_in_popcnt_x];

+ 41 - 17
rtl/java/jsystemh.inc

@@ -342,48 +342,72 @@ function fpc_SarInt64(Const AValue : Int64;const Shift : Byte): Int64;compilerpr
 function SarInt64(Const AValue : Int64;const Shift : Byte = 1): Int64; [external name 'fpc_sarint64'];
 {$endif FPC_HAS_INTERNAL_SAR_QWORD}
 
-{$ifdef FPC_HAS_INTERNAL_BSX}
+{$ifdef FPC_HAS_INTERNAL_BSF}
 {$if defined(cpui386) or defined(cpux86_64)}
-{$define FPC_HAS_INTERNAL_BSX_BYTE}
-{$define FPC_HAS_INTERNAL_BSX_WORD}
-{$define FPC_HAS_INTERNAL_BSX_DWORD}
+{$define FPC_HAS_INTERNAL_BSF_BYTE}
+{$define FPC_HAS_INTERNAL_BSF_WORD}
+{$define FPC_HAS_INTERNAL_BSF_DWORD}
 {$endif}
 {$if defined(cpux86_64)}
-{$define FPC_HAS_INTERNAL_BSX_QWORD}
+{$define FPC_HAS_INTERNAL_BSF_QWORD}
 {$endif}
 {$endif}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_BYTE}
+{$ifdef FPC_HAS_INTERNAL_BSR}
+{$if defined(cpui386) or defined(cpux86_64)}
+{$define FPC_HAS_INTERNAL_BSR_BYTE}
+{$define FPC_HAS_INTERNAL_BSR_WORD}
+{$define FPC_HAS_INTERNAL_BSR_DWORD}
+{$endif}
+{$if defined(cpux86_64)}
+{$define FPC_HAS_INTERNAL_BSR_QWORD}
+{$endif}
+{$endif}
+
+{$ifdef FPC_HAS_INTERNAL_BSF_BYTE}
 function BsfByte(Const AValue: Byte): Byte;[internproc:fpc_in_bsf_x];
-function BsrByte(Const AValue: Byte): Byte;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfByte(Const AValue: Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSF_BYTE}
+{$ifdef FPC_HAS_INTERNAL_BSR_BYTE}
+function BsrByte(Const AValue: Byte): Byte;[internproc:fpc_in_bsr_x];
+{$else}
 function BsrByte(Const AValue: Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
-{$endif}
+{$endif FPC_HAS_INTERNAL_BSR_BYTE}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_WORD}
+{$ifdef FPC_HAS_INTERNAL_BSF_WORD}
 function BsfWord(Const AValue: Word): cardinal;[internproc:fpc_in_bsf_x];
-function BsrWord(Const AValue: Word): cardinal;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfWord(Const AValue: Word): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSF_WORD}
+{$ifdef FPC_HAS_INTERNAL_BSR_WORD}
+function BsrWord(Const AValue: Word): cardinal;[internproc:fpc_in_bsr_x];
+{$else}
 function BsrWord(Const AValue: Word): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
-{$endif}
+{$endif FPC_HAS_INTERNAL_BSR_WORD}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_DWORD}
+{$ifdef FPC_HAS_INTERNAL_BSF_DWORD}
 function BsfDWord(Const AValue : DWord): cardinal;[internproc:fpc_in_bsf_x];
-function BsrDWord(Const AValue : DWord): cardinal;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfDWord(Const AValue : DWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSF_DWORD}
+{$ifdef FPC_HAS_INTERNAL_BSR_DWORD}
+function BsrDWord(Const AValue : DWord): cardinal;[internproc:fpc_in_bsr_x];
+{$else}
 function BsrDWord(Const AValue : DWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
-{$endif FPC_HAS_INTERNAL_BSX_DWORD}
+{$endif FPC_HAS_INTERNAL_BSR_DWORD}
 
-{$ifdef FPC_HAS_INTERNAL_BSX_QWORD}
+{$ifdef FPC_HAS_INTERNAL_BSF_QWORD}
 function BsfQWord(Const AValue : QWord): cardinal;[internproc:fpc_in_bsf_x];
-function BsrQWord(Const AValue : QWord): cardinal;[internproc:fpc_in_bsr_x];
 {$else}
 function BsfQWord(Const AValue : QWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
-function BsrQWord(Const AValue : QWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_BSF_QWORD}
+{$ifdef FPC_HAS_INTERNAL_BSR_QWORD}
+function BsrQWord(Const AValue : QWord): cardinal;[internproc:fpc_in_bsr_x];
+{$else}
+function BsrQWord(Const AValue : QWord): cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}
+{$endif FPC_HAS_INTERNAL_BSR_QWORD}
+
 
 {$ifndef FPUNONE}
 { float math routines }