Call-used general-purpose/integer registers, not interfering with arg registers: grep CALL_USED in the machine description. Compile the small program: extern void* volatile x; extern void* volatile y; int foo (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7) { void* a = x; void* b = y; y = a; x = b; return a0+a1+a2+a3+a4+a5+a6+a7; } Among these, we can use the lexical closure reg, because __vacall_r has no lexical closure (more precisely, we are building a lexical closure for it). grep STATIC_CHAIN_REGNUM and TRAMPOLINE_TEMPLATE in the machine description. Machine description first two (a,b) Lexical closure reg i386 eax,edx,ecx eax,edx ecx m68k d0,d1,a0,a1 d0,d1 a0 mips r2-r15 $2=v0,$3=v1,$8=t0 $2 sparc g1-g4 g1-g3 g2 sparc64 g1-g5 g1-g3 g5 alpha $0-$8,$22-$25,$28 $2,$1 $1 hppa 20-22,28-29 r19,r20,r21,r22 r29 arm r12=ip r0,r1,r3,r2 r12 (!) rs6000 0,3-12 0,11,12 11 m88k 10,13,11(?) r10,r13,r11,r12 r11 convex s0-s7,a1-a5 s1,s2 s0 ia64 r14-r31,r8-r11 r8,r14,r15...r19 r15 x86_64 rax,rdx,rcx,rsi,rdi,r8-r15 rax,r10 r10