aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-07-11 21:08:16 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2023-07-11 21:08:16 +0300
commite7174d670cac7603d22da2552e3bef166aa17ea9 (patch)
tree01fedfc967f579ce51937e1d0caa287d6016d957
parent375739d1a82205744bf304f59091541dd6cc90d5 (diff)
downloadbcgen-e7174d670cac7603d22da2552e3bef166aa17ea9.tar.gz
bcgen-e7174d670cac7603d22da2552e3bef166aa17ea9.zip
allow specifying value types
-rwxr-xr-xbcgen31
1 files changed, 19 insertions, 12 deletions
diff --git a/bcgen b/bcgen
index 1e2e592..95a18b3 100755
--- a/bcgen
+++ b/bcgen
@@ -9,8 +9,8 @@ bcode_header_fmt = '''
#include <stddef.h>
-typedef unsigned long ubcval_t;
-typedef signed long sbcval_t;
+typedef {self.ubcval_type} ubcval_t;
+typedef {self.sbcval_type} sbcval_t;
typedef float fbcval_t;
typedef double dbcval_t;
typedef size_t bcreloc_t;
@@ -222,16 +222,20 @@ def gen_cond(r, i):
return 'a' + str(i) + ' == ' + r[1:]
class BCGen:
- def __init__(self, r = 3, f = 3, extra='', head=''):
+ def __init__(self, r = 3, f = 3,
+ ubcval_type = 'unsigned long',
+ sbcval_type = 'signed long',
+ extra='', head=''):
+
self.r = r
self.f = f
+ self.ubcval_type = ubcval_type
+ self.sbcval_type = sbcval_type
+
self.extra = extra
self.head = head
- gregs = ['ubcval_t r' + str(i) + ' = 0;\n' for i in range(r)]
- fregs = ['dbcval_t f' + str(i) + ' = 0;\n' for i in range(f)]
-
self.regs = []
self.body = []
self.enum = []
@@ -240,12 +244,6 @@ class BCGen:
self.select = []
self.select_header = []
- for g in gregs:
- self.regs += g
-
- for f in fregs:
- self.regs += f
-
def gen_exec_instance(self, name, r0, r1, r2, r3):
label = gen_label(name, r0, r1, r2, r3) + ': '
macro = '{}({}, {}, {}, {}); '.format(name.upper(), r0, r1, r2, r3)
@@ -359,6 +357,15 @@ class BCGen:
self.gen_enum(name, fmt)
def write(self, name='bcode'):
+ gregs = ['ubcval_t r' + str(i) + ' = 0;\n' for i in range(self.r)]
+ fregs = ['dbcval_t f' + str(i) + ' = 0;\n' for i in range(self.f)]
+
+ for g in gregs:
+ self.regs += g
+
+ for f in fregs:
+ self.regs += f
+
with open(name + '.h', 'w') as f:
self.select_header = ''.join(self.select_header)
f.write(bcode_header_fmt.format(self=self))