summaryrefslogtreecommitdiff
path: root/restore.s
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2019-10-12 00:23:50 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2019-10-12 00:23:50 +0300
commit2d78510b9af6f70ec34d77f0e047c698bdf061a9 (patch)
treef56f2c9d7c29952748d62aa99d6e8fdc76402ada /restore.s
parent1248eae0617555a4f13f7bbee9f120ad3d46c5f3 (diff)
draftng
Diffstat (limited to 'restore.s')
-rw-r--r--restore.s32
1 files changed, 32 insertions, 0 deletions
diff --git a/restore.s b/restore.s
new file mode 100644
index 0000000..da1ec03
--- /dev/null
+++ b/restore.s
@@ -0,0 +1,32 @@
+.ifndef __RESTORE__
+.set __RESTORE__, 1
+
+.macro __restore_next n, args:vararg
+.ifnb \args
+ __restore\n \args
+.endif
+.endm
+
+.macro __restore4 arg:req, args:vararg
+.ifnb \args
+.error "restore: too many arguments"
+.endif
+ popq \arg
+.endm
+
+.macro __restore3 arg:req, args:vararg
+ __restore_next 4, \args
+ popq \arg
+.endm
+
+.macro __restore2 arg:req, args:vararg
+ __restore_next 3, \args
+ popq \arg
+.endm
+
+.macro restore arg:req, args:vararg
+ __restore_next 2, \args
+ popq \arg
+.endm
+
+.endif