RPA Toolkit
Added build for windows x64. Still broken! Work in progress...
authorMartin Stoilov <martin@rpasearch.com>
Tue, 26 Jul 2011 06:20:17 +0000 (23:20 -0700)
committerMartin Stoilov <martin@rpasearch.com>
Tue, 26 Jul 2011 06:20:17 +0000 (23:20 -0700)
12 files changed:
arch/windows/x64/rtypes.h [new file with mode: 0644]
build/windows/x64/makefile [new file with mode: 0644]
rgrep/build/windows/x64/makefile [new file with mode: 0644]
rjs/build/windows/x64/makefile [new file with mode: 0644]
rlib/build/windows/x64/makefile [new file with mode: 0644]
rlib/rmem.c
rpa/build/windows/x64/makefile [new file with mode: 0644]
rpa/rpavm.c
rvm/build/windows/x64/makefile [new file with mode: 0644]
rvm/rvmcpu.c
rvm/rvmcpu.h
rvm/rvmreg.h

diff --git a/arch/windows/x64/rtypes.h b/arch/windows/x64/rtypes.h
new file mode 100644 (file)
index 0000000..3170b9e
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef _RTYPES_H_
+#define _RTYPES_H_
+#include <windows.h>
+
+/* 
+ * Architecture dependent types. These types have to be redefined
+ * for every architecture
+ */
+typedef signed char rint8;
+typedef unsigned char ruint8;
+typedef signed short rint16;
+typedef unsigned short ruint16;
+typedef signed int rint32;
+typedef unsigned int ruint32;
+typedef signed long long rint64;
+typedef unsigned long long ruint64;
+typedef long ratomic_t;
+typedef ruint64 rword;
+typedef rint64 rsword;
+
+#ifndef _RSIZE_T_DEFINED
+typedef ruint64 rsize_t;
+#define _RSIZE_T_DEFINED
+#endif
+
+#ifndef _RSSIZE_T_DEFINED
+typedef rint64 rssize_t;
+#define _RSSIZE_T_DEFINED
+#endif
+
+/*
+ * Common types. These types should be the same for most of the architectures.
+ */
+typedef int rboolean;
+typedef void *rpointer;
+typedef const void *rconstpointer;
+typedef struct {ruint32 p1; ruint32 p2;} rpair_t;
+
+/*
+ * Atomic operations (Architecture Dependent)
+ */
+#define R_ATOMIC_CMPXCHG(ptr, oldval, newval, resptr) \
+               do { InterlockedCompareExchange (ptr, newval, oldval); *resptr = *ptr; } while (0)
+
+#define R_ATOMIC_XCHG(ptr, val) \
+               do { val = InterlockedExchange (ptr, val); } while (0)
+
+#define R_ATOMIC_ADD(ptr, val) \
+               do { InterlockedExchangeAdd (ptr, val); } while (0)
+
+#define R_ATOMIC_SUB(ptr, val) \
+               do { InterlockedExchangeAdd (ptr, -val); } while (0)
+
+
+#define R_DEBUG_BRAKE do { } while (0)
+#define R_ASSERT(__a__) do {if (!(__a__)) R_DEBUG_BRAKE; } while (0)
+#define R_SIZE_ALIGN(s, n) ((((s) + (n) - 1) / (n)) * (n))
+#define R_MIN(a, b) ((a) < (b) ? (a): (b))
+#define R_MAX(a, b) ((a) > (b) ? (a): (b))
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((rpointer)0)
+#endif
+#endif
+
+#ifndef TRUE
+#define TRUE ((rboolean)1)
+#endif
+
+#ifndef FALSE
+#define FALSE ((rboolean)0)
+#endif
+
+
+typedef enum {
+       RVALSET_NONE = 0,
+       RVALSET_OR,
+       RVALSET_XOR,
+       RVALSET_AND,
+} rvalset_t;
+
+
+#endif
+
diff --git a/build/windows/x64/makefile b/build/windows/x64/makefile
new file mode 100644 (file)
index 0000000..acb3b84
--- /dev/null
@@ -0,0 +1,50 @@
+!IF "$(BLDCFG)" == ""
+BLDCFG=debug
+!ENDIF 
+
+!IF "$(BLDCFG)" != "release" && "$(BLDCFG)" != "debug"
+!MESSAGE Invalid configuration "$(BLDCFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro BLDCFG on the command line. For example:
+!MESSAGE 
+!MESSAGE nmake /f makefile BLDCFG=debug
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "release" ( Win32 x86 release build )
+!MESSAGE "debug"   ( Win32 x86 debug build)
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+
+PORT=windows
+ARCH=x64
+RPATK_DIR=..\..\..
+
+SUBPROJECTS= \
+       $(RPATK_DIR)\rlib\build\$(PORT)\$(ARCH)+ \
+       $(RPATK_DIR)\rvm\build\$(PORT)\$(ARCH)+ \
+       $(RPATK_DIR)\rpa\build\$(PORT)\$(ARCH)+ \
+       $(RPATK_DIR)\rgrep\build\$(PORT)\$(ARCH)+ \
+       $(RPATK_DIR)\rjs\build\$(PORT)\$(ARCH)+ \
+
+
+ALL : $(SUBPROJECTS)
+
+$(SUBPROJECTS) :
+  @echo Building $(@:+=) ...
+  @cd $(@:+=)
+  @$(MAKE) /NOLOGO /$(MAKEFLAGS)
+  @cd $(MAKEDIR)
+  @echo Built $(@:+=)
+
+CLEAN : $(SUBPROJECTS:+=-clean)
+
+$(SUBPROJECTS:+=-clean) :
+  @echo Building $@ clean ...
+  @cd $(@:-clean=)
+  @$(MAKE) /NOLOGO /$(MAKEFLAGS) clean
+  @cd $(MAKEDIR)
+  @echo Built $@
+
diff --git a/rgrep/build/windows/x64/makefile b/rgrep/build/windows/x64/makefile
new file mode 100644 (file)
index 0000000..5d768cf
--- /dev/null
@@ -0,0 +1,106 @@
+!IF "$(BLDCFG)" == ""
+BLDCFG=debug
+!ENDIF 
+
+!IF "$(BLDCFG)" != "release" && "$(BLDCFG)" != "debug"
+!MESSAGE Invalid configuration "$(BLDCFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro BLDCFG on the command line. For example:
+!MESSAGE 
+!MESSAGE nmake /f makefile BLDCFG=debug
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "release" ( Win32 x86 release build )
+!MESSAGE "debug"   ( Win32 x86 debug build)
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF
+
+
+RGREP=rgrep.exe
+PORT=windows
+ARCH=x64
+SRC_DIR=..\..\..
+DEPSRC_DIR=..\..\..\win32
+RPATK_DIR=..\..\..\..
+RPA_LIB="$(RPATK_DIR)\rpa\build\$(PORT)\$(ARCH)\out\rpa.lib"
+RVM_LIB="$(RPATK_DIR)\rvm\build\$(PORT)\$(ARCH)\out\rvm.lib"
+RLIB_LIB="$(RPATK_DIR)\rlib\build\$(PORT)\$(ARCH)\out\rlib.lib"
+INCLUDE_DIRS=/I"$(SRC_DIR)" /I"$(SRC_DIR)\win32" /I"$(RPATK_DIR)" /I"$(RPATK_DIR)\arch\$(PORT)\$(ARCH)"
+
+!IF "$(BLDCFG)" == "release"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /ML /W3 /EHsc /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /YX /Fo"$(OUTDIR)\\" /FD /c
+LINK_DEBUG=
+
+!ELSEIF  "$(BLDCFG)" == "debug"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /MLd  /Zi /W3  /EHsc  /Od /D "WIN32" /D "_DEBUG" /D "DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /YX /Fo"$(OUTDIR)\\" /FD  /c
+LINK_DEBUG=/DEBUG
+
+!ENDIF
+
+CPP_FLAGS=$(CPP_FLAGS)
+LIBS=$(RPA_LIB) $(RVM_LIB) $(RLIB_LIB)
+
+CPP=cl.exe
+# LINK32=lib.exe
+# LINK32_FLAGS=/nologo /LTCG /out:"$(OUTDIR)\$(TARGET)"
+LINK32=link.exe
+LINK32_FLAGS=$(LIBS) kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /incremental:no $(LINK_DEBUG)
+
+RGREP_OBJS= \
+       "$(OUTDIR)\rpagrep.obj" \
+       "$(OUTDIR)\rpagreputf.obj" \
+       "$(OUTDIR)\fsenumwin.obj" \
+       "$(OUTDIR)\rpagrepdep.obj" \
+       "$(OUTDIR)\main.obj" \
+       
+
+ALL : "$(OUTDIR)\$(RGREP)"
+
+CLEAN :
+       -@erase "$(OUTDIR)\$(RGREP)"
+       -@erase $(RGREP_OBJS)
+       -@erase *.pdb *.idb *.pch "$(OUTDIR)\*.pdb"
+       -@rd /S /Q "$(OUTDIR)"
+
+"$(OUTDIR)" :
+       if not exist "$(OUTDIR)\$(NULL)" mkdir "$(OUTDIR)"
+
+
+"$(OUTDIR)\$(RGREP)" : "$(OUTDIR)" $(RGREP_OBJS)
+       $(LINK32) @<<
+       $(LINK32_FLAGS) /out:"$(OUTDIR)\$(RGREP)" $(RGREP_OBJS)
+<<
+
+
+SOURCE="$(SRC_DIR)\rpagrep.c"
+"$(OUTDIR)\rpagrep.obj" : $(SOURCE) "$(OUTDIR)"
+       $(CPP) $(CPP_FLAGS) $(SOURCE)
+
+SOURCE="$(SRC_DIR)\rpagreputf.c"
+"$(OUTDIR)\rpagreputf.obj" : $(SOURCE) "$(OUTDIR)"
+       $(CPP) $(CPP_FLAGS) $(SOURCE)
+
+SOURCE="$(DEPSRC_DIR)\rpagrepdep.c"
+"$(OUTDIR)\rpagrepdep.obj" : $(SOURCE) "$(OUTDIR)"
+       $(CPP) $(CPP_FLAGS) $(SOURCE)
+
+SOURCE="$(DEPSRC_DIR)\fsenumwin.c"
+"$(OUTDIR)\fsenumwin.obj" : $(SOURCE) "$(OUTDIR)"
+       $(CPP) $(CPP_FLAGS) $(SOURCE)
+
+SOURCE="$(DEPSRC_DIR)\main.c"
+"$(OUTDIR)\main.obj" : $(SOURCE) "$(OUTDIR)"
+       $(CPP) $(CPP_FLAGS) $(SOURCE)
diff --git a/rjs/build/windows/x64/makefile b/rjs/build/windows/x64/makefile
new file mode 100644 (file)
index 0000000..eee55f5
--- /dev/null
@@ -0,0 +1,63 @@
+!IF "$(BLDCFG)" == ""
+BLDCFG=debug
+!ENDIF 
+
+!IF "$(BLDCFG)" != "release" && "$(BLDCFG)" != "debug"
+!MESSAGE Invalid configuration "$(BLDCFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro BLDCFG on the command line. For example:
+!MESSAGE 
+!MESSAGE nmake /f makefile BLDCFG=debug
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "release" ( Win32 x86 release build )
+!MESSAGE "debug"   ( Win32 x86 debug build)
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF
+
+
+RJSEXEC=rjsexec.exe
+PORT=windows
+ARCH=x64
+SRC_DIR=..\..\..
+DEPSRC_DIR=$(SRC_DIR)\windows
+RPATK_DIR=..\..\..\..
+RPA_LIB="$(RPATK_DIR)\rpa\build\$(PORT)\$(ARCH)\out\rpa.lib"
+RVM_LIB="$(RPATK_DIR)\rvm\build\$(PORT)\$(ARCH)\out\rvm.lib"
+RLIB_LIB="$(RPATK_DIR)\rlib\build\$(PORT)\$(ARCH)\out\rlib.lib"
+INCLUDE_DIRS=/I"$(SRC_DIR)" /I"$(SRC_DIR)\win32" /I"$(RPATK_DIR)" /I"$(RPATK_DIR)\arch\$(PORT)\$(ARCH)"
+
+!IF "$(BLDCFG)" == "release"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /ML /W3 /EHsc /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /Fo"$(OUTDIR)\\" /FD /c
+LINK_DEBUG=
+
+!ELSEIF  "$(BLDCFG)" == "debug"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /MLd  /Zi /W3  /EHsc  /Od /D "WIN32" /D "_DEBUG" /D "DEBUG" /D "_CONSOLE" /YX /Fo"$(OUTDIR)\\" /FD  /c
+LINK_DEBUG=/DEBUG
+
+!ENDIF
+
+CPP_FLAGS=$(CPP_FLAGS)
+LIBS=$(RPA_LIB) $(RVM_LIB) $(RLIB_LIB)
+
+RC=rc.exe
+CPP=cl.exe
+# LINK32=lib.exe
+# LINK32_FLAGS=/nologo /LTCG /out:"$(OUTDIR)\$(TARGET)"
+LINK32=link.exe
+LINK32_FLAGS=$(LIBS) kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /incremental:no $(LINK_DEBUG)
+
+include "../rjs.mk"
diff --git a/rlib/build/windows/x64/makefile b/rlib/build/windows/x64/makefile
new file mode 100644 (file)
index 0000000..6db52d7
--- /dev/null
@@ -0,0 +1,60 @@
+
+!IF "$(BLDCFG)" == ""
+BLDCFG=debug
+!ENDIF 
+
+!IF "$(BLDCFG)" != "release" && "$(BLDCFG)" != "debug"
+!MESSAGE Invalid configuration "$(BLDCFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro BLDCFG on the command line. For example:
+!MESSAGE 
+!MESSAGE nmake /f makefile BLDCFG=debug
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "release" ( Win32 x86 release build )
+!MESSAGE "debug"   ( Win32 x86 debug build)
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF
+
+PORT=windows
+ARCH=x64
+SRC_DIR=..\..\..
+RPATK_DIR=..\..\..\..
+INCLUDE_DIRS=/I"$(RPATK_DIR)" /I"$(RPATK_DIR)\arch\$(PORT)\$(ARCH)"
+
+
+!IF "$(BLDCFG)" == "release"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /W3 /EHsc /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fo"$(OUTDIR)\\" /FD /c 
+
+!ELSEIF  "$(BLDCFG)" == "debug"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /Zi /W3 /EHsc  /Od /D "WIN32" /D "_DEBUG" /D "DEBUG" /D "R_DEBUG_MEMALLOC" /D "_CONSOLE" /Fo"$(OUTDIR)\\" /FD  /c
+
+!ENDIF
+
+CPP_FLAGS=$(CPP_FLAGS)
+
+!IF "$(DBG_CONSOLE)" == "shut"
+CPP_FLAGS=$(CPP_FLAGS) /D "_SHUT_CONSOLE"
+!ENDIF
+
+
+CPP=cl.exe
+LINK32=lib.exe
+LINK32_FLAGS=/nologo /LTCG /out:"$(OUTDIR)\$(TARGET)"
+# LINK32=link.exe
+# LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\$(TARGET)" 
+
+include "..\rlib.mk"
index 271462a..ea83429 100644 (file)
@@ -117,7 +117,7 @@ static rpointer r_dbg_realloc(rpointer ptr, rsize_t size)
        r_spinlock_lock(&g_lock);
        g_allocmem -= csize;
        r_spinlock_unlock(&g_lock);
-       size += sizeof(long);
+       size += sizeof(rword);
        mem = (rword*)realloc((void*)mem, (size_t)(size));
        *mem = size;
        r_spinlock_lock(&g_lock);
diff --git a/rpa/build/windows/x64/makefile b/rpa/build/windows/x64/makefile
new file mode 100644 (file)
index 0000000..e323431
--- /dev/null
@@ -0,0 +1,60 @@
+
+!IF "$(BLDCFG)" == ""
+BLDCFG=debug
+!ENDIF 
+
+!IF "$(BLDCFG)" != "release" && "$(BLDCFG)" != "debug"
+!MESSAGE Invalid configuration "$(BLDCFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro BLDCFG on the command line. For example:
+!MESSAGE 
+!MESSAGE nmake /f makefile BLDCFG=debug
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "release" ( Win32 x86 release build )
+!MESSAGE "debug"   ( Win32 x86 debug build)
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF
+
+PORT=windows
+ARCH=x64
+SRC_DIR=..\..\..
+RPATK_DIR=..\..\..\..
+INCLUDE_DIRS=/I"$(RPATK_DIR)" /I"$(RPATK_DIR)\arch\$(PORT)\$(ARCH)"
+
+
+!IF "$(BLDCFG)" == "release"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /W3 /EHsc /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fo"$(OUTDIR)\\" /FD /c 
+
+!ELSEIF  "$(BLDCFG)" == "debug"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /Zi /W3 /EHsc  /Od /D "WIN32" /D "_DEBUG" /D "DEBUG" /D "_CONSOLE" /Fo"$(OUTDIR)\\" /FD  /c
+
+!ENDIF
+
+CPP_FLAGS=$(CPP_FLAGS)
+
+!IF "$(DBG_CONSOLE)" == "shut"
+CPP_FLAGS=$(CPP_FLAGS) /D "_SHUT_CONSOLE"
+!ENDIF
+
+
+CPP=cl.exe
+LINK32=lib.exe
+LINK32_FLAGS=/nologo /LTCG /out:"$(OUTDIR)\$(TARGET)"
+# LINK32=link.exe
+# LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\$(TARGET)" 
+
+include "..\rpa.mk"
index 08dabd0..1919b69 100644 (file)
@@ -27,7 +27,7 @@
 static void rpavm_swi_shift(rvmcpu_t *cpu, rvm_asmins_t *ins)
 {
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
-       long top = RVM_CPUREG_GETL(cpu, R_TOP);
+       rsword top = RVM_CPUREG_GETL(cpu, R_TOP);
 
        if ((top = rpa_stat_shift(stat, top)) >= 0)
                RVM_CPUREG_SETL(cpu, R_TOP, top);
@@ -67,7 +67,7 @@ static void rpavm_swi_verifybitmap(rvmcpu_t *cpu, rvm_asmins_t *ins)
 {
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
        rpabitmap_t bitmap = RVM_CPUREG_GETU(cpu, ins->op1);
-       long r0 = RVM_CPUREG_GETU(cpu, R0);
+       rword r0 = RVM_CPUREG_GETU(cpu, R0);
 
        if (bitmap && r0 > 0) {
                if (!rpa_stat_matchbitmap(stat, RVM_CPUREG_GETL(cpu, R_TOP) - r0, bitmap)) {
@@ -276,7 +276,7 @@ static void rpavm_swi_matchrng_mop(rvmcpu_t *cpu, rvm_asmins_t *ins)
 static void rpavm_swi_emittail(rvmcpu_t *cpu, rvm_asmins_t *ins)
 {
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
-       long index = RVM_CPUREG_GETL(cpu, R_REC);
+       rsword index = RVM_CPUREG_GETL(cpu, R_REC);
 
        if (stat->records)
                r_array_setlength(stat->records, index + 1);
@@ -288,7 +288,7 @@ static void rpavm_swi_abort(rvmcpu_t *cpu, rvm_asmins_t *ins)
        rpa_ruledata_t *ruledata = RVM_CPUREG_GETP(cpu, ins->op1);
        rstr_t name = {(char*)ruledata + ruledata->name, ruledata->namesize};
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
-       long index = RVM_CPUREG_GETL(cpu, R_REC);
+       rsword index = RVM_CPUREG_GETL(cpu, R_REC);
        rword tp = RVM_CPUREG_GETU(cpu, ins->op2);
 
 
@@ -311,7 +311,7 @@ static void rpavm_swi_emitstart(rvmcpu_t *cpu, rvm_asmins_t *ins)
        rpa_ruledata_t *ruledata = RVM_CPUREG_GETP(cpu, ins->op1);
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
        rparecord_t *rec;
-       long index = RVM_CPUREG_GETL(cpu, R_REC);
+       rsword index = RVM_CPUREG_GETL(cpu, R_REC);
        rword tp = RVM_CPUREG_GETU(cpu, ins->op2);
        rstr_t name = {(char*)ruledata + ruledata->name, ruledata->namesize};
 
@@ -344,8 +344,8 @@ static void rpavm_swi_emitend(rvmcpu_t *cpu, rvm_asmins_t *ins)
        rpa_ruledata_t *ruledata = RVM_CPUREG_GETP(cpu, ins->op1);
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
        rparecord_t *rec, *startrec;
-       long startindex = RVM_CPUREG_GETL(cpu, R1) + 1;
-       long index = RVM_CPUREG_GETL(cpu, R_REC);
+       rsword startindex = RVM_CPUREG_GETL(cpu, R1) + 1;
+       rsword index = RVM_CPUREG_GETL(cpu, R_REC);
        rword tp = RVM_CPUREG_GETU(cpu, ins->op2);
        rword tplen = RVM_CPUREG_GETU(cpu, ins->op3);
        rstr_t name = {(char*)ruledata + ruledata->name, ruledata->namesize};
@@ -395,12 +395,12 @@ static void rpavm_swi_prninfo(rvmcpu_t *cpu, rvm_asmins_t *ins)
 static void rpavm_swi_setcache(rvmcpu_t *cpu, rvm_asmins_t *ins)
 {
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
-       long r0 = RVM_CPUREG_GETL(cpu, R0);
-       long ruleid = RVM_CPUREG_GETL(cpu, ins->op1);
-       long prevrec = RVM_CPUREG_GETL(cpu, ins->op2);
-       long endrec = RVM_CPUREG_GETL(cpu, ins->op3);
-       long top = RVM_CPUREG_GETL(cpu, R_OTP);
-       long startrec = 0;
+       rsword r0 = RVM_CPUREG_GETL(cpu, R0);
+       rsword ruleid = RVM_CPUREG_GETL(cpu, ins->op1);
+       rsword prevrec = RVM_CPUREG_GETL(cpu, ins->op2);
+       rsword endrec = RVM_CPUREG_GETL(cpu, ins->op3);
+       rsword top = RVM_CPUREG_GETL(cpu, R_OTP);
+       rsword startrec = 0;
 
        if (r0 > 0 && prevrec != endrec) {
                startrec = prevrec + 1;
@@ -415,9 +415,9 @@ static void rpavm_swi_checkcache(rvmcpu_t *cpu, rvm_asmins_t *ins)
 {
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
        rpacachedentry_t *entry;
-       long ruleid = RVM_CPUREG_GETL(cpu, ins->op1);
-       long top = RVM_CPUREG_GETL(cpu, ins->op2);
-       long r0 = 0;
+       rsword ruleid = RVM_CPUREG_GETL(cpu, ins->op1);
+       rsword top = RVM_CPUREG_GETL(cpu, ins->op2);
+       rsword r0 = 0;
        entry = rpa_cache_lookup(stat->cache, top, ruleid);
        if (entry) {
                r0 = entry->ret;
diff --git a/rvm/build/windows/x64/makefile b/rvm/build/windows/x64/makefile
new file mode 100644 (file)
index 0000000..de43d44
--- /dev/null
@@ -0,0 +1,61 @@
+
+!IF "$(BLDCFG)" == ""
+BLDCFG=debug
+!ENDIF 
+
+!IF "$(BLDCFG)" != "release" && "$(BLDCFG)" != "debug"
+!MESSAGE Invalid configuration "$(BLDCFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro BLDCFG on the command line. For example:
+!MESSAGE 
+!MESSAGE nmake /f makefile BLDCFG=debug
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "release" ( Win32 x86 release build )
+!MESSAGE "debug"   ( Win32 x86 debug build)
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF
+
+
+PORT=windows
+ARCH=x64
+SRC_DIR=..\..\..
+RPATK_DIR=..\..\..\..
+INCLUDE_DIRS=/I"$(RPATK_DIR)" /I"$(RPATK_DIR)\arch\$(PORT)\$(ARCH)"
+
+
+!IF "$(BLDCFG)" == "release"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /W3 /EHsc /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Fo"$(OUTDIR)\\" /FD /c 
+
+!ELSEIF  "$(BLDCFG)" == "debug"
+
+OUTDIR=.\out
+CPP_FLAGS=/nologo $(INCLUDE_DIRS) /Zp1 /Zi /W3 /EHsc  /Od /D "WIN32" /D "_DEBUG" /D "DEBUG" /D "_CONSOLE" /Fo"$(OUTDIR)\\" /FD  /c
+
+!ENDIF
+
+CPP_FLAGS=$(CPP_FLAGS)
+
+!IF "$(DBG_CONSOLE)" == "shut"
+CPP_FLAGS=$(CPP_FLAGS) /D "_SHUT_CONSOLE"
+!ENDIF
+
+
+CPP=cl.exe
+LINK32=lib.exe
+LINK32_FLAGS=/nologo /LTCG /out:"$(OUTDIR)\$(TARGET)"
+# LINK32=link.exe
+# LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\$(TARGET)" 
+
+include "..\rvm.mk"
index a5a99cd..f373390 100644 (file)
@@ -2006,6 +2006,7 @@ int rvm_cpu_exec_debug(rvmcpu_t *cpu, rvm_asmins_t *prog, rword off)
                if (pi->da) {
                        *regda = pi->data;
                }
+               R_DEBUG_BRAKE;
 #if RVM_CONDITIONAL_INSTRUCTIONS
                if (pi->cond) {
                        switch (pi->cond) {
index d94b079..49a4b72 100644 (file)
@@ -166,7 +166,7 @@ enum {
 
 
 #define RVM_REGISTER_BITS (8 * sizeof(rword))
-#define RVM_SIGN_BIT (1LU << (RVM_REGISTER_BITS - 1))
+#define RVM_SIGN_BIT (((rword)1) << (RVM_REGISTER_BITS - 1))
 #define RVM_STATUS_Z (1 << 0)
 #define RVM_STATUS_N (1 << 1)
 #define RVM_STATUS_C (1 << 2)
index ff16be5..0f8a4a9 100644 (file)
@@ -90,7 +90,7 @@ extern "C" {
 #define RVM_CPUREG_SETU(__cpu__, __r__, __val__) RVM_REG_SETU(RVM_CPUREG_PTR(__cpu__, __r__), __val__)
 
 #define RVM_REG_GETL(__r__) (__r__)->v.l
-#define RVM_REG_SETL(__r__, __val__) do { (__r__)->v.l = (long)(__val__); } while (0)
+#define RVM_REG_SETL(__r__, __val__) do { (__r__)->v.l = (rsword)(__val__); } while (0)
 #define RVM_CPUREG_GETL(__cpu__, __r__) RVM_CPUREG_PTR(__cpu__, __r__)->v.l
 #define RVM_CPUREG_SETL(__cpu__, __r__, __val__) RVM_REG_SETL(RVM_CPUREG_PTR(__cpu__, __r__), __val__)