[PATCH] D116551: [AVR] Mark call-clobbered registers as clobbered in interrupt handlers
Ben Shi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 6 20:35:13 PST 2022
benshi001 added a comment.
That gets conformed with avr-gcc's behaviour on handling interrupt/signal service functions.
For the following C code
#include <avr/interrupt.h>
void foo(void);
SIGNAL(_VECTOR(1)) { foo(); }
avr-gcc generates the following asm, which is conformed with your patch.
.file "a.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.text
.global __vector_1
.type __vector_1, @function
__vector_1:
push r1
push r0
in r0,__SREG__
push r0
clr __zero_reg__
push r18
push r19
push r20
push r21
push r22
push r23
push r24
push r25
push r26
push r27
push r30
push r31
/* prologue: Signal */
/* frame size = 0 */
/* stack size = 15 */
.L__stack_usage = 15
call foo
/* epilogue start */
pop r31
pop r30
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
pop r21
pop r20
pop r19
pop r18
pop r0
out __SREG__,r0
pop r0
pop r1
reti
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116551/new/
https://reviews.llvm.org/D116551
More information about the llvm-commits
mailing list