X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=memxor.S;h=a32058bfc4c3c93d22abd82e23f83ae30d4e56e9;hb=3711896e923a5d819733fbfe50590e7e1e6ab51a;hp=2e8223766785f1aefed253cc2f681041e875554a;hpb=c1553054f9455c2f88d6b3cb44de1cc25674a528;p=avr-crypto-lib.git diff --git a/memxor.S b/memxor.S index 2e82237..a32058b 100644 --- a/memxor.S +++ b/memxor.S @@ -1,6 +1,6 @@ /* memxor.S */ /* - This file is part of the Crypto-avr-lib/microcrypt-lib. + 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 @@ -17,61 +17,14 @@ along with this program. If not, see . */ -/* +/* * File: memxor.S * Author: Daniel Otte * Date: 2008-08-07 * License: GPLv3 or later * Description: memxor, XORing one block into another - * + * */ - -#include - - -.macro push_ p1:req, p2:vararg - push \p1 -.ifnb \p2 - push_ \p2 -.endif -.endm - -.macro pop_ p1:req, p2:vararg - pop \p1 -.ifnb \p2 - pop_ \p2 -.endif -.endm - -.macro push_range from:req, to:req - push \from -.if \to-\from - push_range "(\from+1)",\to -.endif -.endm - -.macro pop_range from:req, to:req - pop \to -.if \to-\from - pop_range \from,"(\to-1)" -.endif -.endm - -.macro stack_alloc size:req, reg1=r30, reg2=r31 - in \reg1, _SFR_IO_ADDR(SPL) - in \reg2, _SFR_IO_ADDR(SPH) - sbiw r30, \size - out _SFR_IO_ADDR(SPH), \reg2 - out _SFR_IO_ADDR(SPL), \reg1 -.endm - -.macro stack_free size:req, reg1=r30, reg2=r31 - in \reg1, _SFR_IO_ADDR(SPL) - in \reg2, _SFR_IO_ADDR(SPH) - adiw r30, \size - out _SFR_IO_ADDR(SPH), \reg2 - out _SFR_IO_ADDR(SPL), \reg1 -.endm /* * void memxor(void* dest, const void* src, uint16_t n); @@ -86,9 +39,7 @@ memxor: movw r30, r24 movw r26, r22 movw r24, r20 - tst r24 - brne 1f - tst r25 + adiw r24, 0 breq 2f 1: ld r20, X+ @@ -99,17 +50,17 @@ memxor: brne 1b 2: ret - - - - - - - - - - - - - + + + + + + + + + + + + +