diff --git a/src/interpret.h b/src/interpret.h
index 3d0a6c62c28c534f281d40879f2049726c5bbb5f..8c9455170e26033ae3bad874597cafdf25b13881 100644
--- a/src/interpret.h
+++ b/src/interpret.h
@@ -469,6 +469,13 @@ PMOD_EXPORT extern void push_text( const char *x );
     _sp_[-2]=_;								\
   } while(0)
 
+#define stack_revroll(args) do {					\
+    struct svalue *_sp_ = Pike_sp;					\
+    int _args_ = (args); struct svalue _=_sp_[-1];			\
+    memmove(_sp_-_args_+1, _sp_-_args_, (_args_-1)*sizeof(struct svalue)); \
+    _sp_[-_args_]=_;							\
+  } while(0)
+
 #if PIKE_T_INT+NUMBER_NUMBER==0 && defined(HAS___BUILTIN_MEMSET)
 #define push_zeroes(N) do{					\
     ptrdiff_t num_ = (N);					\