annotate portasm/portasm-x86.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 6a8aac9b2bcf
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: portasm/portasm-x86.S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Portable Assembler Macros for x86
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 /* MASM syntax. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 #if defined(GEN_MASM)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 .386
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 .MODEL FLAT
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 .CODE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 # define BEGIN_ASM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 # define END_ASM END
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 # define GLOBAL(X) _##X PROC
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 # define BEGIN_PROC(X) OPTION PROLOGUE:NONE, EPILOGUE:NONE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 # define END_PROC(X) _##X ENDP
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 # define PUSH(R) push R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 # define POP(R) pop R
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 RET() ret
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 # define CALL_DWORD(R,OFF) call DWORD(R,OFF)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 # define REP(X) rep X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 # define MOVSB movsb
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 # define MOVSW movsw
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 # define MOVSD movsd
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 # define DWORD(R,OFF) dword ptr [R+OFF]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 # define QWORD(R,OFF) qword ptr [R+OFF]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 # define LIT(X) X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 # define INT(X) int X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 # define HEX(X) XCONCAT(X,h)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 # define CALL(X) call X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 # define LEA(S,D) lea D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 # define ADD(S,D) add D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 # define CMP(S,D) cmp D,S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 # define JE(T) je T
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 # define FLDS(OP) fld OP
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 # define FLDL(OP) fld OP
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 # define LOCAL(NAME) NAME
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: 0
diff changeset
65 /* @@@ 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: 0
diff changeset
66 # define SECTION_NOTE_NXSTACK
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 /* GNU/SunPro Assembler AT&T Syntax */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 .text
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 # define BEGIN_ASM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 # 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
72 # include "../autovar/autovar_ABI.h"
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 # if defined(OS_Win32) || defined(OS_Cygwin) || defined(OS_MinGW) || defined(OS_Darwin) || defined(OS_Minix)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 # define CSYM(X) _##X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 # define CSYM(X) X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 /* Systems that work without '%' prefix: MinGW,Apple */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 # define EAX %eax
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 # define EBX %ebx
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 # define ECX %ecx
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 # define EDX %edx
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 # define ESI %esi
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 # define EDI %edi
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 # define EBP %ebp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 # define ESP %esp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 # define AL %al
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 # define AH %ah
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 # define BL %bl
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 # define BH %bh
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 # define CL %cl
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 # define CH %ch
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 # define DL %dl
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 # define DH %dh
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 # define GLOBAL(X) .globl CSYM(X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 # define BEGIN_PROC(X) CSYM(X):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 # define END_PROC(X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 # define PUSH(R) pushl R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 # define POP(R) popl R
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 # define MOVL(S,D) movl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 # define ADDL(S,D) addl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 # define ANDL(S,D) andl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 # define SUBL(S,D) subl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 # define SHRL(S,D) shrl S,D
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 # define RET() ret
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 # define CALL_DWORD(R,OFF) call *DWORD(R,OFF)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 # define REP(X) rep; X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 # define MOVSB movsb
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 # define MOVSW movsw
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 # define MOVSD movsd
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 # define DWORD(R,OFF) OFF(R)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 # define QWORD(R,OFF) OFF(R)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 # include "../autovar/autovar_CC.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 # if defined CC_SUN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 # define LIT(X) $X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 # define LIT(X) XCONCAT($,X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 # define INT(X) int X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 # define HEX(X) XCONCAT(0x,X)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 # define CALL(X) call X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 # define LEA(A,B) lea A,B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 # define CMP(A,B) cmp A,B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 # define JE(X) je X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 # define FLDS(X) flds X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 # define FLDL(X) fldl X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 # define ADD(A,B) add A,B
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 # define LOCAL(X) .X
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130