From 11da511c784eca003deb90c23570f0873954e0de Mon Sep 17 00:00:00 2001 From: Duncan Wilkie Date: Sat, 18 Nov 2023 06:11:09 -0600 Subject: Initial commit. --- gmp-6.3.0/mpn/ia64/ia64-defs.m4 | 147 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 gmp-6.3.0/mpn/ia64/ia64-defs.m4 (limited to 'gmp-6.3.0/mpn/ia64/ia64-defs.m4') diff --git a/gmp-6.3.0/mpn/ia64/ia64-defs.m4 b/gmp-6.3.0/mpn/ia64/ia64-defs.m4 new file mode 100644 index 0000000..f71d280 --- /dev/null +++ b/gmp-6.3.0/mpn/ia64/ia64-defs.m4 @@ -0,0 +1,147 @@ +divert(-1) + + +dnl Copyright 2000, 2002, 2003 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 ia64 assembler comments are C++ style "//" to the end of line. gas +dnl also accepts "#" as a comment, if it's the first non-blank on a line. +dnl +dnl BSD m4 can't handle a multi-character comment like "//" (see notes in +dnl mpn/asm-defs.m4). For now the default "#" is left, but with care taken +dnl not to put any macros after "foo#" (since of course they won't expand). + + +define(`ASM_START', +m4_assert_numargs(0) +`') + + +dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) +dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) +dnl +dnl 32-byte alignment is used for the benefit of itanium-2, where the code +dnl fetcher will only take 2 bundles from a 32-byte aligned target. At +dnl 16mod32 it only reads 1 in the first cycle. This might not make any +dnl difference if the rotate buffers are full or there's other work holding +dnl up execution, but we use 32-bytes to give the best chance of peak +dnl throughput. +dnl +dnl We can use .align here despite the gas bug noted in mpn/ia64/README, +dnl since we're not expecting to execute across a PROLOGUE(), at least not +dnl currently. + +define(`PROLOGUE_cpu', +m4_assert_numargs(1) + ` + .text + .align 32 + .global $1# + .proc $1# +$1:') + +define(`EPILOGUE_cpu', +m4_assert_numargs(1) + ` + .endp $1# +') + +define(`DATASTART', + `dnl + DATA +$1:') +define(`DATAEND',`dnl') + +define(`ASM_END',`dnl') + + +dnl Usage: ALIGN(bytes) +dnl +dnl Emit a ".align" directive. "bytes" is eval()ed, so can be an +dnl expression. +dnl +dnl This version overrides the definition in mpn/asm-defs.m4. We suppress +dnl any .align if the gas byte-swapped-nops bug was detected by configure +dnl GMP_ASM_IA64_ALIGN_OK. + +define(`ALIGN', +m4_assert_numargs(1) +m4_assert_defined(`IA64_ALIGN_OK') +`ifelse(IA64_ALIGN_OK,no,, +`.align eval($1)')') + + +dnl Usage: ASSERT([pr] [,code]) +dnl +dnl Require that the given predicate register is true after executing the +dnl test code. For example, +dnl +dnl ASSERT(p6, +dnl ` cmp.eq p6,p0 = r3, r4') +dnl +dnl If the predicate register argument is empty then nothing is tested, the +dnl code is just executed. This can be used for setups required by later +dnl ASSERTs. The code argument can be omitted to just test a predicate +dnl with no special setup code. +dnl +dnl For convenience, stops are inserted before and after the code emitted. + +define(ASSERT, +m4_assert_numargs_range(1,2) +m4_assert_defined(`WANT_ASSERT') +`ifelse(WANT_ASSERT,1, +` ;; +ifelse(`$2',,, +`$2 + ;; +') +ifelse(`$1',,, +`($1) br .LASSERTok`'ASSERT_label_counter ;; + cmp.ne p6,p6 = r0, r0 C illegal instruction + ;; +.LASSERTok`'ASSERT_label_counter: +define(`ASSERT_label_counter',eval(ASSERT_label_counter+1)) +') +')') +define(`ASSERT_label_counter',1) + +define(`getfsig', `getf.sig') +define(`setfsig', `setf.sig') +define(`cmpeq', `cmp.eq') +define(`cmpne', `cmp.ne') +define(`cmpltu', `cmp.ltu') +define(`cmpleu', `cmp.leu') +define(`cmpgtu', `cmp.gtu') +define(`cmpgeu', `cmp.geu') +define(`cmple', `cmp.le') +define(`cmpgt', `cmp.gt') +define(`cmpeqor', `cmp.eq.or') +define(`cmpequc', `cmp.eq.unc') + +divert -- cgit v1.2.3