X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=avr-asm-macros.S;fp=avr-asm-macros.S;h=4991ceea0ec1a5fa39353305dafb9b52d8abcc41;hb=a397db40b94b01a3ed72f9367961cf68d82593d1;hp=f878be85914f0fa6483195fd68aaa68a3b905029;hpb=e9d9457ed0ea1d8027bc68c28db14bc4caed1f91;p=avr-crypto-lib.git diff --git a/avr-asm-macros.S b/avr-asm-macros.S index f878be8..4991cee 100644 --- a/avr-asm-macros.S +++ b/avr-asm-macros.S @@ -82,6 +82,33 @@ out _SFR_IO_ADDR(SPL), \reg1 .endm + +.macro stack_alloc_large size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + subi \reg1, lo8(\size) + sbci \reg2, hi8(\size) + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + +.macro stack_free_large size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + adiw \reg1, 63 + adiw \reg1, (\size-63) + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + + + /******************************************************************************* * END of MACRO SECTION * *******************************************************************************/