annotate portasm/portasm-x64.S @ 357:d982a00c2177

- PPC64 asm syntax fix, specifying explicitly comparison mode for cmpi (newer toolchains complain, older ones took optional field of instruction which happened to be same value)
author Tassilo Philipp
date Tue, 25 Feb 2020 18:16:13 +0100
parents f5577f6bf97a
children 71c884e610f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Portable Assembler Macros for X64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
281
f5577f6bf97a - file header cleanups for release
Tassilo Philipp
parents: 256
diff changeset
9 Copyright (c) 2011-2018 Daniel Adler <dadler@uni-goettingen.de>
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 /* Common macros. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 #define XCONCAT(A,B) A##B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 #if defined(GEN_MASM)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 /* MASM syntax. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 .CODE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 # define BEGIN_ASM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 # define END_ASM END
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 # define GLOBAL(X) X PROC
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 # define BEGIN_PROC(X) OPTION PROLOGUE:NONE, EPILOGUE:NONE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 # define END_PROC(X) X ENDP
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 # define PUSH(R) push R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 # define POP(R) pop R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 # define MOV(S,D) mov D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 # define MOVB(S,D) mov D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 # define MOVL(S,D) mov D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 # define ADDL(S,D) add D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 # define ANDL(S,D) and D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 # define SUBL(S,D) sub D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 # define SHRL(S,D) shr D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 # define MOVQ(S,D) movq D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 # define ADD(S,D) add D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 # define AND(S,D) and D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 # define SUB(S,D) sub D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 # define SHR(S,D) shr D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 # define MOVD(S,D) movd D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 # define RET() ret
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 # define CALL_DWORD(R,OFF) call DWORD(R,OFF)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 # define REP(X) rep X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 # define MOVSB movsb
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 # define MOVSW movsw
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 # define MOVSD(S,D) movsd D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 # define MOVSDX(S,D) movsdx D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 # define DWORD(R,OFF) dword ptr [R+OFF]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 # define QWORD(R,OFF) qword ptr [R+OFF]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 # define LIT(X) X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 # define INT(X) int X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 # define HEX(X) XCONCAT(X,h)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 # define CALL(X) call X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 # define CALL_REG(X) call X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 # define LEA(S,D) lea D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 # define SET(K,V) K = V
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 # define JE(X) je X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 # define JNE(X) jne X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 # define CMP(A,B) cmp B,A
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 /* GNU/SunPro Assembler AT&T Syntax */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 .text
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 # define BEGIN_ASM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 # if defined (OS_Darwin)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 # define CSYM(X) _##X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 # define CSYM(X) X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 # define RAX %rax
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 # define RBX %rbx
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 # define RCX %rcx
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 # define RDX %rdx
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 # define RSI %rsi
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 # define RDI %rdi
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 # define RBP %rbp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 # define RSP %rsp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 # define R8 %r8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 # define R9 %r9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 # define R10 %r10
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 # define R11 %r11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 # define R12 %r12
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 # define R13 %r13
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 # define R14 %r14
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 # define R15 %r15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 # define XMM0 %xmm0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 # define XMM1 %xmm1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 # define XMM2 %xmm2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 # define XMM3 %xmm3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 # define XMM4 %xmm4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 # define XMM5 %xmm5
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 # define XMM6 %xmm6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 # define XMM7 %xmm7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 # define AL %al
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 # define AH %ah
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 # define BL %bl
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 # define BH %bh
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 # define CL %cl
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 # define CH %ch
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 # define DL %dl
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 # define DH %dh
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 # define GLOBAL(X) .globl CSYM(X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 # define BEGIN_PROC(X) CSYM(X):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 # define END_PROC(X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 # define PUSH(R) pushq R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 # define POP(R) popq R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 # define MOV(S,D) movq S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 # define MOVB(S,D) movb S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 # define MOVL(S,D) movl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 # define ADDL(S,D) addl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 # define ANDL(S,D) andl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 # define SUBL(S,D) subl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 # define SHRL(S,D) shrl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 # define MOVQ(S,D) movq S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 # define ADD(S,D) addq S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 # define AND(S,D) andq S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 # define SUB(S,D) subq S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 # define SHR(S,D) shrq S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 # define MOVD(S,D) movd S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 # define RET() ret
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 # define CALL_DWORD(R,OFF) call *DWORD(R,OFF)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 # define REP(X) rep X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 # define MOVSB movsb
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 # define MOVSW movsw
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 # define MOVSD(S,D) movsd S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 # define DWORD(R,OFF) OFF(R)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 # define QWORD(R,OFF) OFF(R)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 # define LIT(X) $X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 # define INT(X) int X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 # define HEX(X) XCONCAT(0x,X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 # define CALL(X) call X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 # define CALL_REG(X) call *X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 # define LEA(A,B) lea A,B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 # define CMP(A,B) cmp A,B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 # define CMPB(A,B) cmpb A,B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 # define JE(X) je X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 # define JNE(X) jne X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 # define FLDS(X) flds X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 # define FLDL(X) fldl X
249
91db39538e78 - replaced `.set' directives used to set symbol values in assembly files with (seemingly) more portable `=' syntax (e.g. older versions of Sun's `as' don't handle `.set')
Tassilo Philipp
parents: 182
diff changeset
155 /* not available on some platforms, e.g. old solaris, so use K=V syntax # define SET(K,V) .set K,V */
91db39538e78 - replaced `.set' directives used to set symbol values in assembly files with (seemingly) more portable `=' syntax (e.g. older versions of Sun's `as' don't handle `.set')
Tassilo Philipp
parents: 182
diff changeset
156 # define SET(K,V) K = V
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 # define LOCAL(X) .X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159