elf.m4 revision 1.2 1 1.1 mrg divert(-1)
2 1.1 mrg dnl m4 macros for powerpc32 GNU/Linux assembly.
3 1.1 mrg
4 1.1 mrg dnl Copyright 2003, 2005, 2006 Free Software Foundation, Inc.
5 1.1 mrg dnl
6 1.1 mrg dnl This file is part of the GNU MP Library.
7 1.1 mrg dnl
8 1.1 mrg dnl The GNU MP Library is free software; you can redistribute it and/or
9 1.1 mrg dnl modify it under the terms of the GNU Lesser General Public License as
10 1.1 mrg dnl published by the Free Software Foundation; either version 3 of the
11 1.1 mrg dnl License, or (at your option) any later version.
12 1.1 mrg dnl
13 1.1 mrg dnl The GNU MP Library is distributed in the hope that it will be useful,
14 1.1 mrg dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
15 1.1 mrg dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 1.1 mrg dnl Lesser General Public License for more details.
17 1.1 mrg dnl
18 1.1 mrg dnl You should have received a copy of the GNU Lesser General Public License
19 1.1 mrg dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
20 1.1 mrg
21 1.1 mrg define(`ASM_START',`')
22 1.1 mrg
23 1.1 mrg dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo)
24 1.1 mrg dnl EPILOGUE_cpu(GSYM_PREFIX`'foo)
25 1.1 mrg dnl
26 1.1 mrg
27 1.1 mrg define(`PROLOGUE_cpu',
28 1.1 mrg m4_assert_numargs(1)
29 1.1 mrg `
30 1.1 mrg .section ".text"
31 1.1 mrg .align 3
32 1.1 mrg .globl $1
33 1.1 mrg .type $1, @function
34 1.1 mrg $1:')
35 1.1 mrg
36 1.1 mrg define(`EPILOGUE_cpu',
37 1.1 mrg m4_assert_numargs(1)
38 1.1 mrg ` .size $1, .-$1')
39 1.1 mrg
40 1.1 mrg define(`LEA',
41 1.1 mrg m4_assert_numargs(2)
42 1.1 mrg `ifdef(`PIC',`
43 1.1 mrg mflr r0
44 1.2 matt bl 20,31,1f
45 1.2 matt 1: mflr $1
46 1.1 mrg mtlr r0
47 1.2 matt addis $1,$1,_GLOBAL_OFFSET_TABLE_-1b@ha
48 1.2 matt addi $1,$1,_GLOBAL_OFFSET_TABLE_-1b@l
49 1.1 mrg lwz $1, $2@got($1)
50 1.1 mrg ',`
51 1.1 mrg lis $1, $2@ha
52 1.1 mrg la $1, $2@l($1)
53 1.1 mrg ')')
54 1.1 mrg
55 1.1 mrg define(`LEAL',
56 1.1 mrg m4_assert_numargs(2)
57 1.1 mrg `LEA($1,$2)')
58 1.1 mrg
59 1.1 mrg
60 1.1 mrg define(`EXTERN',
61 1.1 mrg m4_assert_numargs(1)
62 1.1 mrg `dnl')
63 1.1 mrg
64 1.1 mrg define(`DEF_OBJECT',
65 1.1 mrg m4_assert_numargs_range(1,2)
66 1.1 mrg `
67 1.1 mrg .section .rodata
68 1.1 mrg ALIGN(ifelse($#,1,2,$2))
69 1.1 mrg .type $1, @object
70 1.1 mrg $1:
71 1.1 mrg ')
72 1.1 mrg
73 1.1 mrg define(`END_OBJECT',
74 1.1 mrg m4_assert_numargs(1)
75 1.1 mrg ` .size $1, .-$1')
76 1.1 mrg
77 1.1 mrg define(`ASM_END', `dnl')
78 1.1 mrg
79 1.1 mrg ifdef(`PIC',`
80 1.1 mrg define(`PIC_SLOW')')
81 1.1 mrg
82 1.1 mrg dnl 64-bit "long long" parameters are put in an even-odd pair, skipping an
83 1.1 mrg dnl even register if that was in turn. I wish somebody could explain why that
84 1.1 mrg dnl is a good idea.
85 1.1 mrg define(`BROKEN_LONGLONG_PARAM')
86 1.1 mrg
87 1.1 mrg divert
88