Mercurial > pub > dyncall > dyncall
annotate portasm/portasm-x64.S @ 199:e2233f6d887f
- mark sparc64/linux as completely supported in manual overview
author | Tassilo Philipp |
---|---|
date | Sun, 19 Mar 2017 19:00:38 +0100 |
parents | 2f6e0dd03bed |
children | 91db39538e78 |
rev | line source |
---|---|
0 | 1 /* |
2 | |
3 Package: dyncall | |
4 Library: portasm | |
165
572aff021627
- file name/layout cleanup, removed "-att" from x64 .S filenames, as unnecessary and also misleading
cslag
parents:
0
diff
changeset
|
5 File: portasm/portasm-x64.S |
0 | 6 Description: Portable Assembler Macros for X64 |
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 #if defined(GEN_MASM) | |
30 /* MASM syntax. */ | |
31 .CODE | |
32 # define BEGIN_ASM | |
33 # define END_ASM END | |
34 # define GLOBAL(X) X PROC | |
35 # define BEGIN_PROC(X) OPTION PROLOGUE:NONE, EPILOGUE:NONE | |
36 # define END_PROC(X) X ENDP | |
37 # define PUSH(R) push R | |
38 # define POP(R) pop R | |
39 # define MOV(S,D) mov D,S | |
40 # define MOVB(S,D) mov D,S | |
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 MOVQ(S,D) movq D,S | |
47 # define ADD(S,D) add D,S | |
48 # define AND(S,D) and D,S | |
49 # define SUB(S,D) sub D,S | |
50 # define SHR(S,D) shr D,S | |
51 # define MOVD(S,D) movd D,S | |
52 # define RET() ret | |
53 # define CALL_DWORD(R,OFF) call DWORD(R,OFF) | |
54 # define REP(X) rep X | |
55 # define MOVSB movsb | |
56 # define MOVSW movsw | |
57 # define MOVSD(S,D) movsd D,S | |
58 # define MOVSDX(S,D) movsdx D,S | |
59 # define DWORD(R,OFF) dword ptr [R+OFF] | |
60 # define QWORD(R,OFF) qword ptr [R+OFF] | |
61 # define LIT(X) X | |
62 # define INT(X) int X | |
63 # define HEX(X) XCONCAT(X,h) | |
64 # define CALL(X) call X | |
65 # define CALL_REG(X) call X | |
66 # define LEA(S,D) lea D,S | |
67 # define SET(K,V) K = V | |
68 # define JE(X) je X | |
69 # define JNE(X) jne X | |
70 # define CMP(A,B) cmp B,A | |
71 # define LOCAL(X) X | |
166
d5705f226298
- added portasm support for adding .section .note.GNU-stack "hints" marking generated .o files from assembly files as not needing an executable stack
cslag
parents:
165
diff
changeset
|
72 /* @@@ check if masm support wanted/needed */ |
d5705f226298
- added portasm support for adding .section .note.GNU-stack "hints" marking generated .o files from assembly files as not needing an executable stack
cslag
parents:
165
diff
changeset
|
73 # define SECTION_NOTE_NXSTACK |
0 | 74 #else |
75 /* GNU/SunPro Assembler AT&T Syntax */ | |
76 .text | |
77 # define BEGIN_ASM | |
78 # define END_ASM | |
168
2bce7629f541
- "tag" also non-linux assembly files with .note.GNU-stack, to mark .o files generated from manual assembly code as not needing an executable stack (still only for x* archs)
cslag
parents:
166
diff
changeset
|
79 # include "../autovar/autovar_ABI.h" |
0 | 80 # if defined (OS_Darwin) |
81 # define CSYM(X) _##X | |
82 # else | |
83 # define CSYM(X) X | |
84 # endif | |
85 # define RAX %rax | |
86 # define RBX %rbx | |
87 # define RCX %rcx | |
88 # define RDX %rdx | |
89 # define RSI %rsi | |
90 # define RDI %rdi | |
91 # define RBP %rbp | |
92 # define RSP %rsp | |
93 # define R8 %r8 | |
94 # define R9 %r9 | |
95 # define R10 %r10 | |
96 # define R11 %r11 | |
97 # define R12 %r12 | |
98 # define R13 %r13 | |
99 # define R14 %r14 | |
100 # define R15 %r15 | |
101 # define XMM0 %xmm0 | |
102 # define XMM1 %xmm1 | |
103 # define XMM2 %xmm2 | |
104 # define XMM3 %xmm3 | |
105 # define XMM4 %xmm4 | |
106 # define XMM5 %xmm5 | |
107 # define XMM6 %xmm6 | |
108 # define XMM7 %xmm7 | |
109 # define AL %al | |
110 # define AH %ah | |
111 # define BL %bl | |
112 # define BH %bh | |
113 # define CL %cl | |
114 # define CH %ch | |
115 # define DL %dl | |
116 # define DH %dh | |
117 # define GLOBAL(X) .globl CSYM(X) | |
118 # define BEGIN_PROC(X) CSYM(X): | |
119 # define END_PROC(X) | |
120 # define PUSH(R) pushq R | |
121 # define POP(R) popq R | |
122 # define MOV(S,D) movq S,D | |
123 # define MOVB(S,D) movb S,D | |
124 # define MOVL(S,D) movl S,D | |
125 # define ADDL(S,D) addl S,D | |
126 # define ANDL(S,D) andl S,D | |
127 # define SUBL(S,D) subl S,D | |
128 # define SHRL(S,D) shrl S,D | |
129 # define MOVQ(S,D) movq S,D | |
130 # define ADD(S,D) addq S,D | |
131 # define AND(S,D) andq S,D | |
132 # define SUB(S,D) subq S,D | |
133 # define SHR(S,D) shrq S,D | |
134 # define MOVD(S,D) movd S,D | |
135 # define RET() ret | |
136 # define CALL_DWORD(R,OFF) call *DWORD(R,OFF) | |
137 # define REP(X) rep X | |
138 # define MOVSB movsb | |
139 # define MOVSW movsw | |
140 # define MOVSD(S,D) movsd S,D | |
141 # define DWORD(R,OFF) OFF(R) | |
142 # define QWORD(R,OFF) OFF(R) | |
143 # define LIT(X) $X | |
144 # define INT(X) int X | |
145 # define HEX(X) XCONCAT(0x,X) | |
146 # define CALL(X) call X | |
147 # define CALL_REG(X) call *X | |
148 # define LEA(A,B) lea A,B | |
149 # define CMP(A,B) cmp A,B | |
150 # define CMPB(A,B) cmpb A,B | |
151 # define JE(X) je X | |
152 # define JNE(X) jne X | |
153 # define FLDS(X) flds X | |
154 # define FLDL(X) fldl X | |
155 # define SET(K,V) .set K,V | |
156 # define LOCAL(X) .X | |
182
2f6e0dd03bed
- excluding Dragonfly also from .note.GNU-stack marking as interpreted wrongly
cslag
parents:
181
diff
changeset
|
157 # if defined(ABI_ELF) && !defined(CC_SUN)/*syntax error*/ && !defined(OS_OpenBSD)/*does this by default, and better*/ && !defined(OS_DragonFlyBSD)/*does this by default, and better*/ |
181
37e1ddcb25f1
- removed .note.GNU-stack hint for openbsd, b/c of it always being interpreted as "need execstack" and not needed, b/c of way saner defaults on OpenBSD
cslag
parents:
168
diff
changeset
|
158 /* explicitly passing no args to mark stack nx */ |
166
d5705f226298
- added portasm support for adding .section .note.GNU-stack "hints" marking generated .o files from assembly files as not needing an executable stack
cslag
parents:
165
diff
changeset
|
159 # define SECTION_NOTE_NXSTACK .section .note.GNU-stack,"",@progbits |
d5705f226298
- added portasm support for adding .section .note.GNU-stack "hints" marking generated .o files from assembly files as not needing an executable stack
cslag
parents:
165
diff
changeset
|
160 # else |
d5705f226298
- added portasm support for adding .section .note.GNU-stack "hints" marking generated .o files from assembly files as not needing an executable stack
cslag
parents:
165
diff
changeset
|
161 # define SECTION_NOTE_NXSTACK |
d5705f226298
- added portasm support for adding .section .note.GNU-stack "hints" marking generated .o files from assembly files as not needing an executable stack
cslag
parents:
165
diff
changeset
|
162 # endif |
0 | 163 #endif |
164 |