diff options
author | HampusM <hampus@hampusmat.com> | 2022-03-07 13:48:57 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-03-07 13:48:57 +0100 |
commit | 563f69b870a7f71026c50605b531ed40d667b0a2 (patch) | |
tree | f9dd8374cae6affb3b52d79e22823c78187b99ed /cores/arduino/wiring_pulse.S | |
parent | f4a2dc0440d17e4c9e609e01e12fcd786d268cf7 (diff) |
Diffstat (limited to 'cores/arduino/wiring_pulse.S')
-rw-r--r-- | cores/arduino/wiring_pulse.S | 178 |
1 files changed, 0 insertions, 178 deletions
diff --git a/cores/arduino/wiring_pulse.S b/cores/arduino/wiring_pulse.S deleted file mode 100644 index 1dd22e6..0000000 --- a/cores/arduino/wiring_pulse.S +++ /dev/null @@ -1,178 +0,0 @@ -/* - wiring_pulse.s - pulseInASM() function in different flavours - Part of Arduino - http://www.arduino.cc/ - - Copyright (c) 2014 Martino Facchin - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA -*/ - -/* - * The following routine was generated by avr-gcc 4.8.3 with the following parameters - * -gstabs -Wa,-ahlmsd=output.lst -dp -fverbose-asm -O2 - * on the original C function - * - * unsigned long pulseInSimpl(volatile uint8_t *port, uint8_t bit, uint8_t stateMask, unsigned long maxloops) - * { - * unsigned long width = 0; - * // wait for any previous pulse to end - * while ((*port & bit) == stateMask) - * if (--maxloops == 0) - * return 0; - * - * // wait for the pulse to start - * while ((*port & bit) != stateMask) - * if (--maxloops == 0) - * return 0; - * - * // wait for the pulse to stop - * while ((*port & bit) == stateMask) { - * if (++width == maxloops) - * return 0; - * } - * return width; - * } - * - * some compiler outputs were removed but the rest of the code is untouched - */ - -#include <avr/io.h> - -.section .text - -.global countPulseASM - -countPulseASM: - -.LM0: -.LFBB1: - push r12 ; ; 130 pushqi1/1 [length = 1] - push r13 ; ; 131 pushqi1/1 [length = 1] - push r14 ; ; 132 pushqi1/1 [length = 1] - push r15 ; ; 133 pushqi1/1 [length = 1] - push r16 ; ; 134 pushqi1/1 [length = 1] - push r17 ; ; 135 pushqi1/1 [length = 1] -/* prologue: function */ -/* frame size = 0 */ -/* stack size = 6 */ -.L__stack_usage = 6 - mov r30,r24 ; port, port ; 2 *movhi/1 [length = 2] - mov r31,r25 ; port, port -/* unsigned long width = 0; -*** // wait for any previous pulse to end -*** while ((*port & bit) == stateMask) -*/ -.LM1: - rjmp .L2 ; ; 181 jump [length = 1] -.L4: -/* if (--maxloops == 0) */ -.LM2: - subi r16,1 ; maxloops, ; 17 addsi3/2 [length = 4] - sbc r17, r1 ; maxloops - sbc r18, r1 ; maxloops - sbc r19, r1 ; maxloops - breq .L13 ; , ; 19 branch [length = 1] -.L2: -/* if (--maxloops == 0) */ -.LM3: - ld r25,Z ; D.1554, *port_7(D) ; 22 movqi_insn/4 [length = 1] - and r25,r22 ; D.1554, bit ; 24 andqi3/1 [length = 1] - cp r25,r20 ; D.1554, stateMask ; 25 *cmpqi/2 [length = 1] - breq .L4 ; , ; 26 branch [length = 1] - rjmp .L6 ; ; 184 jump [length = 1] -.L7: -/* return 0; -*** -*** // wait for the pulse to start -*** while ((*port & bit) != stateMask) -*** if (--maxloops == 0) -*/ -.LM4: - subi r16,1 ; maxloops, ; 31 addsi3/2 [length = 4] - sbc r17, r1 ; maxloops - sbc r18, r1 ; maxloops - sbc r19, r1 ; maxloops - breq .L13 ; , ; 33 branch [length = 1] -.L6: -/* if (--maxloops == 0) */ -.LM5: - ld r25,Z ; D.1554, *port_7(D) ; 41 movqi_insn/4 [length = 1] - and r25,r22 ; D.1554, bit ; 43 andqi3/1 [length = 1] - cpse r25,r20 ; D.1554, stateMask ; 44 enable_interrupt-3 [length = 1] - rjmp .L7 ; - mov r12, r1 ; width ; 7 *movsi/2 [length = 4] - mov r13, r1 ; width - mov r14, r1 ; width - mov r15, r1 ; width - rjmp .L9 ; ; 186 jump [length = 1] -.L10: -/* return 0; -*** -*** // wait for the pulse to stop -*** while ((*port & bit) == stateMask) { -*** if (++width == maxloops) -*/ -.LM6: - ldi r24,-1 ; , ; 50 addsi3/3 [length = 5] - sub r12,r24 ; width, - sbc r13,r24 ; width, - sbc r14,r24 ; width, - sbc r15,r24 ; width, - cp r16,r12 ; maxloops, width ; 51 *cmpsi/2 [length = 4] - cpc r17,r13 ; maxloops, width - cpc r18,r14 ; maxloops, width - cpc r19,r15 ; maxloops, width - breq .L13 ; , ; 52 branch [length = 1] -.L9: -/* if (++width == maxloops) */ -.LM7: - ld r24,Z ; D.1554, *port_7(D) ; 60 movqi_insn/4 [length = 1] - and r24,r22 ; D.1554, bit ; 62 andqi3/1 [length = 1] - cp r24,r20 ; D.1554, stateMask ; 63 *cmpqi/2 [length = 1] - breq .L10 ; , ; 64 branch [length = 1] -/* return 0; -*** } -*** return width; -*/ -.LM8: - mov r22,r12 ; D.1553, width ; 108 movqi_insn/1 [length = 1] - mov r23,r13 ; D.1553, width ; 109 movqi_insn/1 [length = 1] - mov r24,r14 ; D.1553, width ; 110 movqi_insn/1 [length = 1] - mov r25,r15 ; D.1553, width ; 111 movqi_insn/1 [length = 1] -/* epilogue start */ -.LM9: - pop r17 ; ; 171 popqi [length = 1] - pop r16 ; ; 172 popqi [length = 1] - pop r15 ; ; 173 popqi [length = 1] - pop r14 ; ; 174 popqi [length = 1] - pop r13 ; ; 175 popqi [length = 1] - pop r12 ; ; 176 popqi [length = 1] - ret ; 177 return_from_epilogue [length = 1] -.L13: -.LM10: - ldi r22,0 ; D.1553 ; 120 movqi_insn/1 [length = 1] - ldi r23,0 ; D.1553 ; 121 movqi_insn/1 [length = 1] - ldi r24,0 ; D.1553 ; 122 movqi_insn/1 [length = 1] - ldi r25,0 ; D.1553 ; 123 movqi_insn/1 [length = 1] -/* epilogue start */ -.LM11: - pop r17 ; ; 138 popqi [length = 1] - pop r16 ; ; 139 popqi [length = 1] - pop r15 ; ; 140 popqi [length = 1] - pop r14 ; ; 141 popqi [length = 1] - pop r13 ; ; 142 popqi [length = 1] - pop r12 ; ; 143 popqi [length = 1] - ret ; 144 return_from_epilogue [length = 1] |