The first way is similar to the last inline example and will have similar problems with getting references to local variables. For each assembly function, a separate implementation for each supported platform will be required. GCC will use this information to save prior state and also to select appropriate nonconflicting registers for those specified as dynamically allocated.
The way to work around this problem is to create additional modules such that the inline code would only be called at most once within each module, or only use this scheme if your code has no labels. That means I can't simply write my own assembly version of the strlen function, but instead I need to write an inline version of the strlen functionality.
Clobber list items are either register names or the special clobbers listed below. In order to inform the compiler of these changes, list them in the clobber list. Instead of printing the result, the sum will be passed back to the caller as a return value.
It is doable, but not the same way you would do in C for example. I hope this will make it easy to choose the most appropriate solution should inline assembly be called for in your project.