diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/portasm-x86.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,128 @@
+/*
+
+ Package: dyncall
+ Library: portasm
+ File: portasm/portasm-x86.S
+ Description: Portable Assembler Macros for x86
+ 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
+/* MASM syntax. */
+#if defined(GEN_MASM)
+.386
+.MODEL FLAT
+.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 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 RET() ret
+#  define CALL_DWORD(R,OFF) call DWORD(R,OFF)
+#  define REP(X) rep X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD movsd
+#  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 LEA(S,D) lea D,S
+#  define ADD(S,D) add D,S
+#  define CMP(S,D) cmp D,S
+#  define JE(T) je T
+#  define FLDS(OP) fld OP
+#  define FLDL(OP) fld OP
+#  define LOCAL(NAME) NAME
+#else
+/* GNU/SunPro Assembler AT&T Syntax */
+	.text
+#  define BEGIN_ASM
+#  define END_ASM 
+#  include "../autovar/autovar_OS.h"
+#  if defined(OS_Win32) || defined(OS_Cygwin) || defined(OS_MinGW) || defined(OS_Darwin) || defined(OS_Minix)
+#    define CSYM(X) _##X
+#  else
+#    define CSYM(X) X
+#  endif
+/* Systems that work without '%' prefix: MinGW,Apple */
+#  define EAX %eax
+#  define EBX %ebx
+#  define ECX %ecx
+#  define EDX %edx
+#  define ESI %esi
+#  define EDI %edi
+#  define EBP %ebp
+#  define ESP %esp
+#  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) pushl R
+#  define POP(R) popl R
+#  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 RET() ret
+#  define CALL_DWORD(R,OFF) call *DWORD(R,OFF)
+#  define REP(X) rep; X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD movsd
+#  define DWORD(R,OFF) OFF(R)
+#  define QWORD(R,OFF) OFF(R)
+#  include "../autovar/autovar_CC.h"
+#  if defined CC_SUN
+#    define LIT(X) $X
+#  else
+#    define LIT(X) XCONCAT($,X)
+#  endif
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(0x,X)
+#  define CALL(X) call X
+#  define LEA(A,B) lea A,B
+#  define CMP(A,B) cmp A,B
+#  define JE(X)    je X
+#  define FLDS(X)  flds X
+#  define FLDL(X)  fldl X
+#  define ADD(A,B) add A,B
+#  define LOCAL(X) .X
+#endif
+