Le problème
Si on se contente de compiler des programmes en langage C, les compilateurs se valent.
Ca se complique si on appelle des modules en assembleur, et que l'on souhaite spécifier certains registres.

Incompatibilité entre SAS/C et GCC
SAS/C

ULONG __asm __saveds mafonction(register __a0 ULONG a) ;
GCC
ULONG __saveds mafonction(ULONG a __asm(a0)) ;

La solution, utiliser le macroprocesseur


#ifdef __SASC
#   define SAVEDS       __saveds
#   define ASM          __asm
#   define REG(x,y)     register __##x y
#elif defined(__GNUC__)
#   define SAVEDS       __saveds
#   define ASM
#   define REG(x,y)     y __asm(#x)
#else
#   error   add #defines for your compiler...
#endif
et sans oublier de modifier la fonction pour qu'elle s'accorde correctement
ULONG ASM SAVEDS mafonction(REG(a0, ULONG a)) ;
Le macro assembleur fera le boulot de traduire dans le bon format.