Mark inputs and outputs for extended ASM correctly
Mark inputs and outputs for extended ASM correctly

LTO optimizations breaking things continues to teach me more about
how these are supposed to be written. I believe these are now completely
correct.

A little extra regarding yield:

@brghena and I spent a little while talking this through, but this
should properly express to the complier the semantics of what we're
doing.

Our old approach of

    push {lr}
    svc  0
    pop  {pc}

failed in cases where yield is inlined and the link register isn't
live (i.e. during the `while (1) { yield(); }` loop at the end.

It would've been okay if we'd `pop {lr}` instead of `pop {pc}`'d
because then we would've just pushed and popped a garbage value to
the stack, but the better fix is to just express the clobbers to
the compiler and let it sort what what does and doesn't need to be
saved.

Currently tested working with blink / c_hello / accel_leds

tock/libtock-c,tock/libtock-c,tock/libtock-c