Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/branches/default'
Browse files Browse the repository at this point in the history
  • Loading branch information
Sibras committed Jul 5, 2020
2 parents bcdb4c1 + 24ed907 commit bfbea29
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 11 deletions.
8 changes: 8 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -3699,6 +3699,14 @@ if test "$gmp_asm_syntax_testing" != no; then
case $ABI in
32)
GMP_INCLUDE_MPN(arm/arm-defs.m4) ;;
64)
case $host in
*-*-darwin*)
GMP_INCLUDE_MPN(arm64/darwin.m4) ;;
*)
GMP_INCLUDE_MPN(arm64/arm64-defs.m4) ;;
esac
;;
esac
;;
hppa*-*-*)
Expand Down
53 changes: 53 additions & 0 deletions mpn/arm64/arm64-defs.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
divert(-1)

dnl m4 macros for ARM64 ELF assembler.

dnl Copyright 2020 Free Software Foundation, Inc.

dnl This file is part of the GNU MP Library.
dnl
dnl The GNU MP Library is free software; you can redistribute it and/or modify
dnl it under the terms of either:
dnl
dnl * the GNU Lesser General Public License as published by the Free
dnl Software Foundation; either version 3 of the License, or (at your
dnl option) any later version.
dnl
dnl or
dnl
dnl * the GNU General Public License as published by the Free Software
dnl Foundation; either version 2 of the License, or (at your option) any
dnl later version.
dnl
dnl or both in parallel, as here.
dnl
dnl The GNU MP Library is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
dnl for more details.
dnl
dnl You should have received copies of the GNU General Public License and the
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
dnl see https://www.gnu.org/licenses/.


dnl Standard commenting is with @, the default m4 # is for constants and we
dnl don't want to disable macro expansions in or after them.

changecom


dnl LEA_HI(reg,gmp_symbol), LEA_LO(reg,gmp_symbol)
dnl
dnl Load the address of gmp_symbol into a register. We split this into two
dnl parts to allow separation for manual insn scheduling.

ifdef(`PIC',`dnl
define(`LEA_HI', `adrp $1, :got:$2')dnl
define(`LEA_LO', `ldr $1, [$1, #:got_lo12:$2]')dnl
',`dnl
define(`LEA_HI', `adrp $1, $2')dnl
define(`LEA_LO', `add $1, $1, :lo12:$2')dnl
')dnl

divert`'dnl
12 changes: 3 additions & 9 deletions mpn/arm64/bdiv_q_1.asm
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,9 @@ PROLOGUE(mpn_bdiv_q_1)
clz cnt, x6
lsr d, d, cnt

ifdef(`PIC',`
adrp x7, :got:__gmp_binvert_limb_table
LEA_HI( x7, binvert_limb_table)
ubfx x6, d, 1, 7
ldr x7, [x7, #:got_lo12:__gmp_binvert_limb_table]
',`
adrp x7, __gmp_binvert_limb_table
ubfx x6, d, 1, 7
add x7, x7, :lo12:__gmp_binvert_limb_table
')
LEA_LO( x7, binvert_limb_table)
ldrb w6, [x7, x6]
ubfiz x7, x6, 1, 8
umull x6, w6, w6
Expand All @@ -81,7 +75,7 @@ ifdef(`PIC',`
mul x6, x6, x6
msub di, x6, d, x7

b mpn_pi1_bdiv_q_1
b GSYM_PREFIX`'mpn_pi1_bdiv_q_1
EPILOGUE()

PROLOGUE(mpn_pi1_bdiv_q_1)
Expand Down
50 changes: 50 additions & 0 deletions mpn/arm64/darwin.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
divert(-1)

dnl m4 macros for ARM64 Darwin assembler.

dnl Copyright 2020 Free Software Foundation, Inc.

dnl This file is part of the GNU MP Library.
dnl
dnl The GNU MP Library is free software; you can redistribute it and/or modify
dnl it under the terms of either:
dnl
dnl * the GNU Lesser General Public License as published by the Free
dnl Software Foundation; either version 3 of the License, or (at your
dnl option) any later version.
dnl
dnl or
dnl
dnl * the GNU General Public License as published by the Free Software
dnl Foundation; either version 2 of the License, or (at your option) any
dnl later version.
dnl
dnl or both in parallel, as here.
dnl
dnl The GNU MP Library is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
dnl for more details.
dnl
dnl You should have received copies of the GNU General Public License and the
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
dnl see https://www.gnu.org/licenses/.


dnl Standard commenting is with @, the default m4 # is for constants and we
dnl don't want to disable macro expansions in or after them.

changecom


dnl LEA_HI(reg,gmp_symbol), LEA_LO(reg,gmp_symbol)
dnl
dnl Load the address of gmp_symbol into a register. We split this into two
dnl parts to allow separation for manual insn scheduling. TODO: Darwin allows
dnl for relaxing these two insns into an adr and a nop, but that requires the
dnl .loh pseudo for connecting them.

define(`LEA_HI',`adrp $1, $2@GOTPAGE')dnl
define(`LEA_LO',`ldr $1, [$1, $2@GOTPAGEOFF]')dnl

divert`'dnl
4 changes: 2 additions & 2 deletions mpn/arm64/invert_limb.asm
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ C Compiler generated, mildly edited. Could surely be further optimised.
ASM_START()
PROLOGUE(mpn_invert_limb)
lsr x2, x0, #54
adrp x1, approx_tab
LEA_HI( x1, approx_tab)
and x2, x2, #0x1fe
add x1, x1, :lo12:approx_tab
LEA_LO( x1, approx_tab)
ldrh w3, [x1,x2]
lsr x4, x0, #24
add x4, x4, #1
Expand Down

0 comments on commit bfbea29

Please sign in to comment.