1divert(-1) 2 3dnl m4 macros for PowerPC assembler (32 and 64 bit). 4 5dnl Copyright 2000, 2002, 2003 Free Software Foundation, Inc. 6dnl 7dnl This file is part of the GNU MP Library. 8dnl 9dnl The GNU MP Library is free software; you can redistribute it and/or 10dnl modify it under the terms of the GNU Lesser General Public License as 11dnl published by the Free Software Foundation; either version 3 of the 12dnl License, or (at your option) any later version. 13dnl 14dnl The GNU MP Library is distributed in the hope that it will be useful, 15dnl but WITHOUT ANY WARRANTY; without even the implied warranty of 16dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17dnl Lesser General Public License for more details. 18dnl 19dnl You should have received a copy of the GNU Lesser General Public License 20dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. 21 22 23dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) 24dnl 25dnl This is the same as the default in mpn/asm-defs.m4, but with ALIGN(4) 26dnl not 8. 27dnl 28dnl 4-byte alignment is normally enough, certainly it's what gcc gives. We 29dnl don't want bigger alignment within PROLOGUE since it can introduce 30dnl padding into multiple-entrypoint routines, and with gas such padding is 31dnl zero words, which are not valid instructions. 32 33define(`PROLOGUE_cpu', 34m4_assert_numargs(1) 35` TEXT 36 ALIGN(4) 37 GLOBL `$1' GLOBL_ATTR 38 TYPE(`$1',`function') 39`$1'LABEL_SUFFIX') 40 41 42dnl Usage: r0 ... r31, cr0 ... cr7 43dnl 44dnl Registers names, either left as "r0" etc or mapped to plain 0 etc, 45dnl according to the result of the GMP_ASM_POWERPC_REGISTERS configure 46dnl test. 47 48ifelse(WANT_R_REGISTERS,no,` 49forloop(i,0,31,`deflit(`r'i,i)') 50forloop(i,0,31,`deflit(`v'i,i)') 51forloop(i,0,31,`deflit(`f'i,i)') 52forloop(i,0,7, `deflit(`cr'i,i)') 53') 54 55 56dnl Usage: ASSERT(cond,instructions) 57dnl 58dnl If WANT_ASSERT is 1, output the given instructions and expect the given 59dnl flags condition to then be satisfied. For example, 60dnl 61dnl ASSERT(eq, `cmpwi r6, 123') 62dnl 63dnl The instructions can be omitted to just assert a flags condition with 64dnl no extra calculation. For example, 65dnl 66dnl ASSERT(ne) 67dnl 68dnl The condition can be omitted to just output the given instructions when 69dnl assertion checking is wanted. For example, 70dnl 71dnl ASSERT(, `mr r11, r0') 72dnl 73dnl Using a zero word for an illegal instruction is probably not ideal, 74dnl since it marks the beginning of a traceback table in the 64-bit ABI. 75dnl But assertions are only for development, so it doesn't matter too much. 76 77define(ASSERT, 78m4_assert_numargs_range(1,2) 79m4_assert_defined(`WANT_ASSERT') 80`ifelse(WANT_ASSERT,1, 81 `C ASSERT 82 $2 83ifelse(`$1',,, 84` b$1 L(ASSERT_ok`'ASSERT_counter) 85 W32 0 C assertion failed 86L(ASSERT_ok`'ASSERT_counter): 87define(`ASSERT_counter',incr(ASSERT_counter)) 88')')') 89 90define(ASSERT_counter,1) 91 92 93divert 94