1/* PowerPC64 mpn_lshift -- mpn_add_n/mpn_sub_n -- mpn addition and 2 subtraction. 3 Copyright (C) 2003-2022 Free Software Foundation, Inc. 4 This file is part of the GNU C Library. 5 6 The GNU C Library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 The GNU C Library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with the GNU C Library; if not, see 18 <https://www.gnu.org/licenses/>. */ 19 20#include <sysdep.h> 21 22/* cycles/limb 23 * POWER7 2.18 24 */ 25 26#ifdef USE_AS_SUB 27# define FUNC __mpn_sub_n 28# define ADDSUBC subfe 29#else 30# define FUNC __mpn_add_n 31# define ADDSUBC adde 32#endif 33 34#define RP r3 35#define UP r4 36#define VP r5 37#define N r6 38 39ENTRY_TOCLESS (FUNC, 5) 40#ifdef USE_AS_SUB 41 addic r0, r1, -1 42#else 43 addic r0, r0, 0 44#endif 45 andi. r7, N, 1 46 beq L(bx0) 47 48 ld r7, 0(UP) 49 ld r9, 0(VP) 50 ADDSUBC r11, r9, r7 51 std r11, 0(RP) 52 cmpldi N, N, 1 53 beq N, L(end) 54 addi UP, UP, 8 55 addi VP, VP, 8 56 addi RP, RP, 8 57 58L(bx0): addi r0, N, 2 59 srdi r0, r0, 2 60 mtctr r0 61 62 andi. r7, N, 2 63 bne L(mid) 64 65 addi UP, UP, 16 66 addi VP, VP, 16 67 addi RP, RP, 16 68 69 .align 5 70L(top): ld r6, -16(UP) 71 ld r7, -8(UP) 72 ld r8, -16(VP) 73 ld r9, -8(VP) 74 ADDSUBC r10, r8, N 75 ADDSUBC r11, r9, r7 76 std r10, -16(RP) 77 std r11, -8(RP) 78L(mid): ld r6, 0(UP) 79 ld r7, 8(UP) 80 ld r8, 0(VP) 81 ld r9, 8(VP) 82 ADDSUBC r10, r8, N 83 ADDSUBC r11, r9, r7 84 std r10, 0(RP) 85 std r11, 8(RP) 86 addi UP, UP, 32 87 addi VP, VP, 32 88 addi RP, RP, 32 89 bdnz L(top) 90 91L(end): subfe r3, r0, r0 92#ifdef USE_AS_SUB 93 neg r3, r3 94#else 95 addi r3, r3, 1 96#endif 97 blr 98END(FUNC) 99