#define context_save \
__asm__ volatile ("PUSH R0"); \
__asm__ volatile ("PUSH R1"); \
__asm__ volatile ("PUSH R2"); \
__asm__ volatile ("PUSH R3"); \
__asm__ volatile ("PUSH R4"); \
__asm__ volatile ("PUSH R5"); \
__asm__ volatile ("PUSH R6"); \
__asm__ volatile ("PUSH R7"); \
__asm__ volatile ("PUSH R8"); \
__asm__ volatile ("PUSH R9"); \
__asm__ volatile ("PUSH R10"); \
__asm__ volatile ("PUSH R11"); \
__asm__ volatile ("PUSH R12"); \
__asm__ volatile ("PUSH R13"); \
__asm__ volatile ("PUSH R14"); \
__asm__ volatile ("PUSH R15"); \
__asm__ volatile ("PUSH R16"); \
__asm__ volatile ("PUSH R17"); \
__asm__ volatile ("PUSH R18"); \
__asm__ volatile ("PUSH R19"); \
__asm__ volatile ("PUSH R20"); \
__asm__ volatile ("PUSH R21"); \
__asm__ volatile ("PUSH R22"); \
__asm__ volatile ("PUSH R23"); \
__asm__ volatile ("PUSH R24"); \
__asm__ volatile ("PUSH R25"); \
__asm__ volatile ("PUSH R26"); \
__asm__ volatile ("PUSH R27"); \
__asm__ volatile ("PUSH R28"); \
__asm__ volatile ("PUSH R29"); \
__asm__ volatile ("PUSH R30"); \
__asm__ volatile ("PUSH R31"); \
// __asm__ volatile ("IN R25, __SREG__"); \
// __asm__ volatile ("PUSH R25");
#define context_restore \
__asm__ volatile ("POP R31"); \
__asm__ volatile ("POP R30"); \
__asm__ volatile ("POP R29"); \
__asm__ volatile ("POP R28"); \
__asm__ volatile ("POP R27"); \
__asm__ volatile ("POP R26"); \
__asm__ volatile ("POP R25"); \
__asm__ volatile ("POP R24"); \
__asm__ volatile ("POP R23"); \
__asm__ volatile ("POP R22"); \
__asm__ volatile ("POP R21"); \
__asm__ volatile ("POP R20"); \
__asm__ volatile ("POP R19"); \
__asm__ volatile ("POP R18"); \
__asm__ volatile ("POP R17"); \
__asm__ volatile ("POP R16"); \
__asm__ volatile ("POP R15"); \
__asm__ volatile ("POP R14"); \
__asm__ volatile ("POP R13"); \
__asm__ volatile ("POP R12"); \
__asm__ volatile ("POP R11"); \
__asm__ volatile ("POP R10"); \
__asm__ volatile ("POP R9"); \
__asm__ volatile ("POP R8"); \
__asm__ volatile ("POP R7"); \
__asm__ volatile ("POP R6"); \
__asm__ volatile ("POP R5"); \
__asm__ volatile ("POP R4"); \
__asm__ volatile ("POP R3"); \
__asm__ volatile ("POP R2"); \
__asm__ volatile ("POP R1"); \
__asm__ volatile ("POP R0"); \
// __asm__ volatile ("POP R25"); \
// __asm__ volatile ("OUT __SREG__, R25"); \
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
for(int i =0; i < 5; i++){
Serial.println(i);
//context_save
__asm__ volatile ("JMP Dee");
__asm__ volatile("eww:");
}
__asm__ volatile("Dee:"
"LDI R29, 100" );
//context_restore
__asm__ volatile("JMP eww");
while(1);
}