1; Copyright (C) 2017-2018 Free Software Foundation, Inc. 2; Contributed by Sebastian Perta. 3; 4; This file is free software; you can redistribute it and/or modify it 5; under the terms of the GNU General Public License as published by the 6; Free Software Foundation; either version 3, or (at your option) any 7; later version. 8; 9; This file is distributed in the hope that it will be useful, but 10; WITHOUT ANY WARRANTY; without even the implied warranty of 11; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12; General Public License for more details. 13; 14; Under Section 7 of GPL version 3, you are granted additional 15; permissions described in the GCC Runtime Library Exception, version 16; 3.1, as published by the Free Software Foundation. 17; 18; You should have received a copy of the GNU General Public License and 19; a copy of the GCC Runtime Library Exception along with this program; 20; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 21; <http://www.gnu.org/licenses/>. 22 23 24#include "vregs.h" 25 26 .text 27 28START_FUNC ___adddi3 29 30 movw hl, sp ; use HL-based addressing (allows for direct addw) 31 32 movw ax, [hl+4] 33 addw ax, [hl+12] 34 movw r8, ax 35 36 mov a, [hl+6] ; middle bytes of the result are determined using 8-bit 37 addc a, [hl+14] ; ADDC insns which both account for and update the carry bit 38 mov r10, a ; (no ADDWC instruction is available) 39 mov a, [hl+7] 40 addc a, [hl+15] 41 mov r11, a 42 43 mov a, [hl+8] 44 addc a, [hl+16] 45 mov r12, a 46 mov a, [hl+9] 47 addc a, [hl+17] 48 mov r13, a 49 50 movw ax, [hl+10] 51 sknc ; account for the possible carry from the 52 incw ax ; latest 8-bit operation 53 addw ax, [hl+18] 54 movw r14, ax 55 56 ret 57 58END_FUNC ___adddi3 59