cavatools: initialize repository
[cavatools.git] / caveat / selectFP
1 #!/usr/bin/python3
2 #
3 # Copyright (c) 2020 Peter Hsu. All Rights Reserved. See LICENCE file for details.
4 #
5
6
7 import sys
8 import re
9
10 FPdef = open('FPoperations.def', 'r')
11 f = open('caveat_fp.h', 'w')
12
13 if sys.argv[1] == 'soft':
14 f.write('#define SOFT_FP\n')
15 elif sys.argv[1] == 'hard':
16 f.write('// Do not define SOFT_FP\n')
17 else:
18 print('Bad Argument', sys.argv[1])
19 exit(-1)
20 f.write('#ifndef NO_FP_MACROS\n')
21
22 for line in FPdef:
23 line = line.rstrip('\r\n')
24 # print(line)
25 if line == '' or line[0] != '@':
26 continue
27 (macro, rm, fpx, soft, type, hard) = re.split('\t+', line)
28 macro = macro[1:]
29 macro_dyn = re.sub('\(\s*rm,\s*', '_dyn(', macro)
30 # funcs = [ 'f32', 'f64', 'nf32', 'nf64', 'i32', 'ui32', 'i64', 'ui64' ]
31 # for x in funcs:
32 # soft = soft.replace('.'+x, '.'+x+'()')
33 # funcs = [ 'l', 'ul', 'i', 'ui', 'd', 'f' ]
34 # for x in funcs:
35 # hard = hard.replace('.'+x, '.'+x)
36 # hard = hard.replace('.'+x, '.'+x+'()')
37 if (sys.argv[1] == 'soft'):
38 (srm, fpx) = ('', '')
39 if rm != '-':
40 srm = ' SRM(rm);'
41 rrm = ' SRM(cpu->state.fcsr.rmode);'
42 if fpx != '-':
43 fpx = ' SET_FPX;'
44 f.write('#define {:s}{:s} {:s};{:s}{:s}\n'.format(macro, srm, soft, fpx, rrm))
45 if rm != '-':
46 f.write('#define {:s} {:s};{:s}\n'.format(macro_dyn, soft, fpx))
47 elif (sys.argv[1] == 'hard'):
48 (srm, rrm, fpx) = ('', '', '')
49 if rm != '-':
50 srm = ' SRM(rm);'
51 rrm = ' RRM(rm);'
52 if fpx != '-':
53 fpx = ' SET_FPX;'
54 f.write('#define {:s}{:s} {:s};{:s}{:s}\n'.format(macro, srm, hard, fpx, rrm))
55 if rm != '-':
56 f.write('#define {:s} {:s};{:s}\n'.format(macro_dyn, hard, fpx))
57
58 f.write('#endif\n')
59 f.close()
60 FPdef.close()