Mercurial > pub > dyncall > dyncall
comparison portasm/portasm-x86.S @ 0:3e629dc19168
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:24:28 +0100 |
parents | |
children | d5705f226298 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3e629dc19168 |
---|---|
1 /* | |
2 | |
3 Package: dyncall | |
4 Library: portasm | |
5 File: portasm/portasm-x86.S | |
6 Description: Portable Assembler Macros for x86 | |
7 License: | |
8 | |
9 Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de> | |
10 | |
11 Permission to use, copy, modify, and distribute this software for any | |
12 purpose with or without fee is hereby granted, provided that the above | |
13 copyright notice and this permission notice appear in all copies. | |
14 | |
15 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
16 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
17 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
18 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
22 | |
23 */ | |
24 | |
25 | |
26 | |
27 /* Common macros. */ | |
28 #define XCONCAT(A,B) A##B | |
29 /* MASM syntax. */ | |
30 #if defined(GEN_MASM) | |
31 .386 | |
32 .MODEL FLAT | |
33 .CODE | |
34 # define BEGIN_ASM | |
35 # define END_ASM END | |
36 # define GLOBAL(X) _##X PROC | |
37 # define BEGIN_PROC(X) OPTION PROLOGUE:NONE, EPILOGUE:NONE | |
38 # define END_PROC(X) _##X ENDP | |
39 # define PUSH(R) push R | |
40 # define POP(R) pop R | |
41 # define MOVL(S,D) mov D,S | |
42 # define ADDL(S,D) add D,S | |
43 # define ANDL(S,D) and D,S | |
44 # define SUBL(S,D) sub D,S | |
45 # define SHRL(S,D) shr D,S | |
46 # define RET() ret | |
47 # define CALL_DWORD(R,OFF) call DWORD(R,OFF) | |
48 # define REP(X) rep X | |
49 # define MOVSB movsb | |
50 # define MOVSW movsw | |
51 # define MOVSD movsd | |
52 # define DWORD(R,OFF) dword ptr [R+OFF] | |
53 # define QWORD(R,OFF) qword ptr [R+OFF] | |
54 # define LIT(X) X | |
55 # define INT(X) int X | |
56 # define HEX(X) XCONCAT(X,h) | |
57 # define CALL(X) call X | |
58 # define LEA(S,D) lea D,S | |
59 # define ADD(S,D) add D,S | |
60 # define CMP(S,D) cmp D,S | |
61 # define JE(T) je T | |
62 # define FLDS(OP) fld OP | |
63 # define FLDL(OP) fld OP | |
64 # define LOCAL(NAME) NAME | |
65 #else | |
66 /* GNU/SunPro Assembler AT&T Syntax */ | |
67 .text | |
68 # define BEGIN_ASM | |
69 # define END_ASM | |
70 # include "../autovar/autovar_OS.h" | |
71 # if defined(OS_Win32) || defined(OS_Cygwin) || defined(OS_MinGW) || defined(OS_Darwin) || defined(OS_Minix) | |
72 # define CSYM(X) _##X | |
73 # else | |
74 # define CSYM(X) X | |
75 # endif | |
76 /* Systems that work without '%' prefix: MinGW,Apple */ | |
77 # define EAX %eax | |
78 # define EBX %ebx | |
79 # define ECX %ecx | |
80 # define EDX %edx | |
81 # define ESI %esi | |
82 # define EDI %edi | |
83 # define EBP %ebp | |
84 # define ESP %esp | |
85 # define AL %al | |
86 # define AH %ah | |
87 # define BL %bl | |
88 # define BH %bh | |
89 # define CL %cl | |
90 # define CH %ch | |
91 # define DL %dl | |
92 # define DH %dh | |
93 # define GLOBAL(X) .globl CSYM(X) | |
94 # define BEGIN_PROC(X) CSYM(X): | |
95 # define END_PROC(X) | |
96 # define PUSH(R) pushl R | |
97 # define POP(R) popl R | |
98 # define MOVL(S,D) movl S,D | |
99 # define ADDL(S,D) addl S,D | |
100 # define ANDL(S,D) andl S,D | |
101 # define SUBL(S,D) subl S,D | |
102 # define SHRL(S,D) shrl S,D | |
103 # define RET() ret | |
104 # define CALL_DWORD(R,OFF) call *DWORD(R,OFF) | |
105 # define REP(X) rep; X | |
106 # define MOVSB movsb | |
107 # define MOVSW movsw | |
108 # define MOVSD movsd | |
109 # define DWORD(R,OFF) OFF(R) | |
110 # define QWORD(R,OFF) OFF(R) | |
111 # include "../autovar/autovar_CC.h" | |
112 # if defined CC_SUN | |
113 # define LIT(X) $X | |
114 # else | |
115 # define LIT(X) XCONCAT($,X) | |
116 # endif | |
117 # define INT(X) int X | |
118 # define HEX(X) XCONCAT(0x,X) | |
119 # define CALL(X) call X | |
120 # define LEA(A,B) lea A,B | |
121 # define CMP(A,B) cmp A,B | |
122 # define JE(X) je X | |
123 # define FLDS(X) flds X | |
124 # define FLDL(X) fldl X | |
125 # define ADD(A,B) add A,B | |
126 # define LOCAL(X) .X | |
127 #endif | |
128 |