static inline uint32_t shift_s32_l4 (uint32_t op1)
{
uint8_t op2;
uint32_t res;
asm(
"ldi %[op2],0x10\n"
"mul %A[op1],%A[op2]\n"
"movw %A[res],r0\n"
"mul %C[op1],%A[op2]\n"
"movw %C[res],r0\n"
"mul %D[op1],%A[op2]\n"
"add %D[res],r0\n"
"mul %B[op1],%A[op2]\n"
"add %B[res],r0\n"
"adc %C[res],r1\n"
"clr __zero_reg__\n"
"adc %D[res],__zero_reg__\n"
: [res] "=&r" (res),
[op2] "=&d" (op2)
: [op1] "r" (op1)
);
return res;
}
c3RhdGljIGlubGluZSB1aW50MzJfdCBzaGlmdF9zMzJfbDQgKHVpbnQzMl90IG9wMSkKewogICAgdWludDhfdCBvcDI7CiAgICB1aW50MzJfdCByZXM7CiAgICAKICAgIGFzbSgKICAgICAgICAibGRpICVbb3AyXSwweDEwXG4iCiAgICAgICAgCiAgICAgICAgIm11bCAlQVtvcDFdLCVBW29wMl1cbiIKICAgICAgICAibW92dyAlQVtyZXNdLHIwXG4iCiAgICAgICAgCiAgICAgICAgIm11bCAlQ1tvcDFdLCVBW29wMl1cbiIKICAgICAgICAibW92dyAlQ1tyZXNdLHIwXG4iCiAgICAgICAgCiAgICAgICAgIm11bCAlRFtvcDFdLCVBW29wMl1cbiIKICAgICAgICAiYWRkICVEW3Jlc10scjBcbiIKICAgICAgICAKICAgICAgICAibXVsICVCW29wMV0sJUFbb3AyXVxuIgogICAgICAgICJhZGQgJUJbcmVzXSxyMFxuIgogICAgICAgICJhZGMgJUNbcmVzXSxyMVxuIgogICAgICAgICJjbHIgX196ZXJvX3JlZ19fXG4iCiAgICAgICAgImFkYyAlRFtyZXNdLF9femVyb19yZWdfX1xuIgogICAgICAgIAogICAgICAgIDogW3Jlc10gIj0mciIgKHJlcyksCiAgICAgICAgICBbb3AyXSAiPSZkIiAob3AyKQogICAgICAgIDogW29wMV0gInIiIChvcDEpCiAgICApOwogICAgCiAgICByZXR1cm4gcmVzOwp9