1/* asm.h -- Definitions for 68k syntax variations.
2 *
3 *      Copyright (C) 1992, 1994, 1996, 1998,
4 *                    2001, 2002 Free Software Foundation, Inc.
5 *
6 * This file is part of Libgcrypt.
7 *
8 * Libgcrypt is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as
10 * published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
12 *
13 * Libgcrypt is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
21 *
22 * Note: This code is heavily based on the GNU MP Library.
23 *	 Actually it's the same code with only minor changes in the
24 *	 way the data is stored; this is to support the abstraction
25 *	 of an optional secure memory allocation which may be used
26 *	 to avoid revealing of sensitive data due to paging etc.
27 */
28
29
30#undef ALIGN
31
32#ifdef MIT_SYNTAX
33#define PROLOG(name)
34#define EPILOG(name)
35#define R(r)r
36#define MEM(base)base@
37#define MEM_DISP(base,displacement)base@(displacement)
38#define MEM_INDX(base,idx,size_suffix)base@(idx:size_suffix)
39#define MEM_INDX1(base,idx,size_suffix,scale)base@(idx:size_suffix:scale)
40#define MEM_PREDEC(memory_base)memory_base@-
41#define MEM_POSTINC(memory_base)memory_base@+
42#define L(label) label
43#define TEXT .text
44#define ALIGN .even
45#define GLOBL .globl
46#define moveql moveq
47/* Use variable sized opcodes.  */
48#define bcc jcc
49#define bcs jcs
50#define bls jls
51#define beq jeq
52#define bne jne
53#define bra jra
54#endif
55
56#ifdef SONY_SYNTAX
57#define PROLOG(name)
58#define EPILOG(name)
59#define R(r)r
60#define MEM(base)(base)
61#define MEM_DISP(base,displacement)(displacement,base)
62#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix)
63#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale)
64#define MEM_PREDEC(memory_base)-(memory_base)
65#define MEM_POSTINC(memory_base)(memory_base)+
66#define L(label) label
67#define TEXT .text
68#define ALIGN .even
69#define GLOBL .globl
70#endif
71
72#ifdef MOTOROLA_SYNTAX
73#define PROLOG(name)
74#define EPILOG(name)
75#define R(r)r
76#define MEM(base)(base)
77#define MEM_DISP(base,displacement)(displacement,base)
78#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix)
79#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale)
80#define MEM_PREDEC(memory_base)-(memory_base)
81#define MEM_POSTINC(memory_base)(memory_base)+
82#define L(label) label
83#define TEXT
84#define ALIGN
85#define GLOBL XDEF
86#define lea LEA
87#define movel MOVE.L
88#define moveml MOVEM.L
89#define moveql MOVEQ.L
90#define cmpl CMP.L
91#define orl OR.L
92#define clrl CLR.L
93#define eorw EOR.W
94#define lsrl LSR.L
95#define lsll LSL.L
96#define roxrl ROXR.L
97#define roxll ROXL.L
98#define addl ADD.L
99#define addxl ADDX.L
100#define addql ADDQ.L
101#define subl SUB.L
102#define subxl SUBX.L
103#define subql SUBQ.L
104#define negl NEG.L
105#define mulul MULU.L
106#define bcc BCC
107#define bcs BCS
108#define bls BLS
109#define beq BEQ
110#define bne BNE
111#define bra BRA
112#define dbf DBF
113#define rts RTS
114#define d0 D0
115#define d1 D1
116#define d2 D2
117#define d3 D3
118#define d4 D4
119#define d5 D5
120#define d6 D6
121#define d7 D7
122#define a0 A0
123#define a1 A1
124#define a2 A2
125#define a3 A3
126#define a4 A4
127#define a5 A5
128#define a6 A6
129#define a7 A7
130#define sp SP
131#endif
132
133#ifdef ELF_SYNTAX
134#define PROLOG(name) .type name,@function
135#define EPILOG(name) .size name,.-name
136#define MEM(base)(R(base))
137#define MEM_DISP(base,displacement)(displacement,R(base))
138#define MEM_PREDEC(memory_base)-(R(memory_base))
139#define MEM_POSTINC(memory_base)(R(memory_base))+
140#ifdef __STDC__
141#define R_(r)%##r
142#define R(r)R_(r)
143#define MEM_INDX_(base,idx,size_suffix)(R(base),R(idx##.##size_suffix))
144#define MEM_INDX(base,idx,size_suffix)MEM_INDX_(base,idx,size_suffix)
145#define MEM_INDX1_(base,idx,size_suffix,scale)(R(base),R(idx##.##size_suffix*scale))
146#define MEM_INDX1(base,idx,size_suffix,scale)MEM_INDX1_(base,idx,size_suffix,scale)
147#define L(label) .##label
148#else
149#define R(r)%/**/r
150#define MEM_INDX(base,idx,size_suffix)(R(base),R(idx).size_suffix)
151#define MEM_INDX1(base,idx,size_suffix,scale)(R(base),R(idx).size_suffix*scale)
152#define L(label) ./**/label
153#endif
154#define TEXT .text
155#define ALIGN .align 2
156#define GLOBL .globl
157#define bcc jbcc
158#define bcs jbcs
159#define bls jbls
160#define beq jbeq
161#define bne jbne
162#define bra jbra
163#endif
164
165#if defined (SONY_SYNTAX) || defined (ELF_SYNTAX)
166#define movel move.l
167#define moveml movem.l
168#define moveql moveq.l
169#define cmpl cmp.l
170#define orl or.l
171#define clrl clr.l
172#define eorw eor.w
173#define lsrl lsr.l
174#define lsll lsl.l
175#define roxrl roxr.l
176#define roxll roxl.l
177#define addl add.l
178#define addxl addx.l
179#define addql addq.l
180#define subl sub.l
181#define subxl subx.l
182#define subql subq.l
183#define negl neg.l
184#define mulul mulu.l
185#endif
186