https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80115
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- %si is 16-bit register name, not 8-bit register name. For that you need to use 16-bit operand, not 8-bit. Another option is to use a modifier to force some other size. I don't know what the stap note parser actually cares about, if it doesn't make any difference between %al, %ax, %eax and grabs the argument size from somewhere else, you might e.g. #define _SDT_ARGTMPL(id) %k[id] instead of %[id] for defined(__i386__) and then you'll always get %eax, %esi, etc. regardless of whether the argument is 8-bit, 16-bit, 32-bit or 64-bit. Or you can use %w[id] to always get %ax, %si, etc. (shorter).