diff portasm/portasm-x64-att.S @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/portasm-x64-att.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,156 @@
+/*
+
+ Package: dyncall
+ Library: portasm
+ File: portasm/portasm-x64-att.S
+ Description: Portable Assembler Macros for X64
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/* Common macros. */
+#define XCONCAT(A,B) A##B
+#if defined(GEN_MASM)
+/* MASM syntax. */
+.CODE
+#  define BEGIN_ASM
+#  define END_ASM END
+#  define GLOBAL(X) X PROC
+#  define BEGIN_PROC(X) 	OPTION PROLOGUE:NONE, EPILOGUE:NONE
+#  define END_PROC(X)   X ENDP
+#  define PUSH(R) push R
+#  define POP(R) pop R
+#  define MOV(S,D)  mov D,S
+#  define MOVB(S,D) mov D,S
+#  define MOVL(S,D) mov D,S
+#  define ADDL(S,D) add D,S
+#  define ANDL(S,D) and D,S
+#  define SUBL(S,D) sub D,S
+#  define SHRL(S,D) shr D,S
+#  define MOVQ(S,D) movq D,S
+#  define ADD(S,D)  add D,S
+#  define AND(S,D)  and D,S
+#  define SUB(S,D)  sub D,S
+#  define SHR(S,D)  shr D,S
+#  define MOVD(S,D) movd D,S
+#  define RET() ret
+#  define CALL_DWORD(R,OFF) call DWORD(R,OFF)
+#  define REP(X) rep X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD(S,D)  movsd D,S
+#  define MOVSDX(S,D) movsdx D,S
+#  define DWORD(R,OFF) dword ptr [R+OFF]
+#  define QWORD(R,OFF) qword ptr [R+OFF]
+#  define LIT(X) X
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(X,h)
+#  define CALL(X) call X
+#  define CALL_REG(X) call X
+#  define LEA(S,D) lea D,S
+#  define SET(K,V) K = V
+#  define JE(X) je X
+#  define JNE(X) jne X
+#  define CMP(A,B) cmp B,A
+#  define LOCAL(X) X
+#else
+/* GNU/SunPro Assembler AT&T Syntax */
+	.text
+#  define BEGIN_ASM
+#  define END_ASM
+#  include "../autovar/autovar_OS.h"
+#  if defined (OS_Darwin)
+#    define CSYM(X) _##X
+#  else
+#    define CSYM(X) X
+#  endif
+#  define RAX %rax
+#  define RBX %rbx
+#  define RCX %rcx
+#  define RDX %rdx
+#  define RSI %rsi
+#  define RDI %rdi
+#  define RBP %rbp
+#  define RSP %rsp
+#  define R8   %r8
+#  define R9   %r9
+#  define R10  %r10
+#  define R11  %r11
+#  define R12  %r12
+#  define R13  %r13
+#  define R14  %r14
+#  define R15  %r15
+#  define XMM0 %xmm0
+#  define XMM1 %xmm1
+#  define XMM2 %xmm2
+#  define XMM3 %xmm3
+#  define XMM4 %xmm4
+#  define XMM5 %xmm5
+#  define XMM6 %xmm6
+#  define XMM7 %xmm7
+#  define AL   %al
+#  define AH   %ah
+#  define BL   %bl
+#  define BH   %bh
+#  define CL   %cl
+#  define CH   %ch
+#  define DL   %dl
+#  define DH   %dh
+#  define GLOBAL(X) .globl CSYM(X)
+#  define BEGIN_PROC(X)  CSYM(X):
+#  define END_PROC(X)
+#  define PUSH(R) pushq R
+#  define POP(R) popq R
+#  define MOV(S,D)  movq S,D
+#  define MOVB(S,D) movb S,D
+#  define MOVL(S,D) movl S,D
+#  define ADDL(S,D) addl S,D
+#  define ANDL(S,D) andl S,D
+#  define SUBL(S,D) subl S,D
+#  define SHRL(S,D) shrl S,D
+#  define MOVQ(S,D) movq S,D
+#  define ADD(S,D) addq S,D
+#  define AND(S,D) andq S,D
+#  define SUB(S,D) subq S,D
+#  define SHR(S,D) shrq S,D
+#  define MOVD(S,D) movd S,D
+#  define RET() ret
+#  define CALL_DWORD(R,OFF) call *DWORD(R,OFF)
+#  define REP(X) rep X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD(S,D) movsd S,D
+#  define DWORD(R,OFF) OFF(R)
+#  define QWORD(R,OFF) OFF(R)
+#  define LIT(X) $X
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(0x,X)
+#  define CALL(X) call X
+#  define CALL_REG(X) call *X
+#  define LEA(A,B) lea A,B
+#  define CMP(A,B) cmp A,B
+#  define CMPB(A,B) cmpb A,B
+#  define JE(X)    je X
+#  define JNE(X)    jne X
+#  define FLDS(X)  flds X
+#  define FLDL(X)  fldl X
+#  define SET(K,V) .set K,V
+#  define LOCAL(X) .X
+#endif
+