diff --git a/src/amd/addrlib/inc/addrtypes.h b/src/amd/addrlib/inc/addrtypes.h index 5524f67cd45..095fc27ad34 100644 --- a/src/amd/addrlib/inc/addrtypes.h +++ b/src/amd/addrlib/inc/addrtypes.h @@ -87,9 +87,12 @@ typedef int INT; #endif #ifndef ADDR_FASTCALL - #if defined(__GNUC__) || defined(BRAHMA_ARM) - // We don't care about the performance of call instructions in addrlib - #define ADDR_FASTCALL + #if defined(__GNUC__) + #if defined(__i386__) || defined(__amd64__) || defined(__x86_64__) + #define ADDR_FASTCALL __attribute__((regparm(0))) + #else + #define ADDR_FASTCALL + #endif #else #define ADDR_FASTCALL __fastcall #endif diff --git a/src/amd/addrlib/meson.build b/src/amd/addrlib/meson.build index f396c86211a..7609cc94eb3 100644 --- a/src/amd/addrlib/meson.build +++ b/src/amd/addrlib/meson.build @@ -52,7 +52,8 @@ files_addrlib = files( 'src/r800/siaddrlib.h', ) -cpp_args_addrlib = [] +# Skip the addrlib definition of ADDR_FASTCALL so as not to use regparm. +cpp_args_addrlib = ['-DADDR_FASTCALL='] foreach w : ['-Wno-unused-variable', '-Wno-unused-local-typedefs', '-Wno-unused-but-set-variable', '-Wno-maybe-uninitialized'] if cpp.has_argument(w)