for cygwin, implement SHIFTSP using gnu asm.
authorGengbin Zheng <gzheng@illinois.edu>
Wed, 24 Nov 2004 17:32:54 +0000 (17:32 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Wed, 24 Nov 2004 17:32:54 +0000 (17:32 +0000)
src/QuickThreads/md/setjmp.c
src/QuickThreads/md/setjmp64.c

index d5c9f70e4c68e05a5803c3432813d49162aad42d..84a23d26918a0d2f5318b5dcb55150680cb525a9 100644 (file)
 
 struct helpdesc { qt_helper_t *hfn; qt_t *jb; void *old; void *new; };
 
-#ifdef QT_GROW_DOWN
-#define SHIFTSP(pos) {char *osp=alloca(0); alloca((osp-((char*)pos))+256); }
+#ifdef __CYGWIN__
+# ifdef QT_GROW_DOWN
+#define SHIFTSP(pos) asm ( "mov %0, %%esp\n"::"m"((char*)pos-256));
+# else
+#define SHIFTSP(pos) asm ( "mov %0, %%esp\n"::"m"((char*)pos+256));
+# endif
 #else
+# ifdef QT_GROW_DOWN
+#define SHIFTSP(pos) {char *osp=alloca(0); alloca((osp-((char*)pos))+256); }
+# else
 #define SHIFTSP(pos) {char *osp=alloca(0); alloca((((char*)pos)-osp)+256); }
+# endif
 #endif
 
 static void qt_args_1(qt_t *rjb, void *u, void *t,
index c800c7072df5e4c44473f581f1f82e746c415bcc..694377f0915994bae0c536c24a3b59383def052c 100644 (file)
 
 struct helpdesc { qt_helper_t *hfn; qt_t *jb; void *old; void *new; };
 
-#ifdef QT_GROW_DOWN
-#define SHIFTSP(pos) {char *osp=alloca(0); alloca((osp-((char*)pos))+256); }
+#ifdef __CYGWIN__
+# ifdef QT_GROW_DOWN
+#define SHIFTSP(pos) asm ( "mov %0, %%esp\n"::"m"((char*)pos-256));
+# else
+#define SHIFTSP(pos) asm ( "mov %0, %%esp\n"::"m"((char*)pos+256));
+# endif
 #else
+# ifdef QT_GROW_DOWN
+#define SHIFTSP(pos) {char *osp=alloca(0); alloca((osp-((char*)pos))+256); }
+# else
 #define SHIFTSP(pos) {char *osp=alloca(0); alloca((((char*)pos)-osp)+256); }
+# endif
 #endif
 
 #define MAXTABLE 1000