./trunk/gcc136/vcs_diff_rtl.patch 2026-06-24-03:27
> 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
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}