trunk/gcc136/vcs_diff_rtl.patch results

File details

./trunk/gcc136/vcs_diff_rtl.patch 2026-06-24-03:27

Used binaries

   

Binaries version

> uname -a
Linux cfarm136 7.0.7+deb14-amd64 #1 SMP PREEMPT_DYNAMIC Debian 7.0.7-1 (2026-05-15) x86_64 GNU/Linux

Full file content

 
diff --git a/rtl/inc/cgeneric.inc b/rtl/inc/cgeneric.inc
index 7360ef4bf3..1525cd96e1 100644
--- a/rtl/inc/cgeneric.inc
+++ b/rtl/inc/cgeneric.inc
@@ -55,6 +55,9 @@ procedure memset(var x; value: byte; count: size_t); cdecl; external clib;
 {$ifdef LINUX}
   {$define BUGGYMEMCHR}
 {$endif}
+{$ifdef AIX}
+  {$define FPC_DIRECT_INDEXBYTE_M1}
+{$endif}
 
 {$ifdef AIX}
   {$define MEMCHR_NEEDS_LEN_POSITIVE}
@@ -68,6 +71,9 @@ function rawmemchr(const buf; b: cint): pointer; cdecl; external clib;
 function IndexByte(Const buf;len:sizeint;b:byte):sizeint;{$ifdef SYSTEMINLINE}inline;{$endif}
 var
   res: pointer;
+{$ifdef FPC_DIRECT_INDEXBYTE_M1}
+  psrc,pend : pbyte;
+{$endif FPC_DIRECT_INDEXBYTE_M1}
 begin
   if len = 0 then
     exit(-1);
@@ -84,6 +90,23 @@ function IndexByte(Const buf;len:sizeint;b:byte):sizeint;{$ifdef SYSTEMINLINE}in
     len := high(sizeint);
 {$endif MEMCHR_NEEDS_LEN_POSITIVE}
 {$endif BUGGYMEMCHR}
+{$ifdef FPC_DIRECT_INDEXBYTE_M1}
+  psrc:=@buf;
+  pend:=psrc+len;
+  { simulate assembler implementations behaviour, which is expected }
+  { fpc_pchar_to_ansistr in astrings.inc                            }
+  if len = -1 then
+    begin
+      pend:=pbyte(high(PtrUInt)-PtrUint(sizeof(byte)));
+      while (psrcb) do
+        inc(psrc);
+      if psrc nil) then
     IndexByte := SizeInt(res-@buf)
diff --git a/rtl/powerpc/powerpc.inc b/rtl/powerpc/powerpc.inc
index ad25cd25b8..2329583f43 100644
--- a/rtl/powerpc/powerpc.inc
+++ b/rtl/powerpc/powerpc.inc
@@ -575,6 +575,7 @@ procedure filldword(var x;count : longint;value : dword);
 {$endif FPC_SYSTEM_HAS_FILLDWORD}
 
 
+{$ifndef FPC_DISABLE_INDEX_ASM}
 {$ifndef FPC_SYSTEM_HAS_INDEXBYTE}
 {$define FPC_SYSTEM_HAS_INDEXBYTE}
 function IndexByte_asm(const buf;len:longint;b:byte):longint; assembler; nostackframe;
@@ -680,6 +681,7 @@ function IndexDWord(const buf;len:longint;b:DWord):longint;
     IndexDWord:=IndexDWord_asm(buf,len,b);
 end;
 {$endif FPC_SYSTEM_HAS_INDEXDWORD}
+{$endif ndef FPC_DISABLE_INDEX_ASM}
 
 
 {$ifndef FPC_SYSTEM_HAS_COMPAREBYTE}
diff --git a/rtl/powerpc64/powerpc64.inc b/rtl/powerpc64/powerpc64.inc
index 089b59016b..fa036313f8 100644
--- a/rtl/powerpc64/powerpc64.inc
+++ b/rtl/powerpc64/powerpc64.inc
@@ -94,6 +94,7 @@ procedure filldword(var x;count : SizeInt;value : dword); assembler; nostackfram
 {$endif FPC_SYSTEM_HAS_FILLDWORD}
 
 
+{$ifndef FPC_DISABLE_INDEX_ASM}
 {$ifndef FPC_SYSTEM_HAS_INDEXBYTE}
 {$define FPC_SYSTEM_HAS_INDEXBYTE}
 function IndexByte(const buf;len:SizeInt;b:byte):int64; assembler; nostackframe;
@@ -175,6 +176,7 @@ function IndexDWord(const buf;len:SizeInt;b:DWord):int64; assembler; nostackfram
 .LIndexDWordDone:
 end;
 {$endif FPC_SYSTEM_HAS_INDEXDWORD}
+{$endif ndef FPC_DISABLE_INDEX_ASM}
 
 {$ifndef FPC_SYSTEM_HAS_COMPAREBYTE}
 {$define FPC_SYSTEM_HAS_COMPAREBYTE}