]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - avr-asm-macros.S
renaming to AVR-Crypto-Lib
[avr-crypto-lib.git] / avr-asm-macros.S
index f878be85914f0fa6483195fd68aaa68a3b905029..57007accffe5d57d7fa0a375020839a56511b2dd 100644 (file)
@@ -1,6 +1,6 @@
 /* avr-asm-macros.S */
 /*
-    This file is part of the Crypto-avr-lib/microcrypt-lib.
+    This file is part of the This file is part of the AVR-Crypto-Lib.
     Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
 
     This program is free software: you can redistribute it and/or modify
        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
+
+.macro stack_free_large2 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, 63
+       adiw \reg1, (\size-63*2) 
+       cli
+       out _SFR_IO_ADDR(SPH), \reg2
+       out _SFR_IO_ADDR(SREG), r0
+       out _SFR_IO_ADDR(SPL), \reg1
+.endm
+
+
 /*******************************************************************************
 * END of MACRO SECTION                                                         *
 *******************************************************************************/