#!/usr/bin/python3 # # Copyright (c) 2020 Peter Hsu. All Rights Reserved. See LICENCE file for details. # import sys import re FPdef = open('FPoperations.def', 'r') f = open('caveat_fp.h', 'w') if sys.argv[1] == 'soft': f.write('#define SOFT_FP\n') elif sys.argv[1] == 'hard': f.write('// Do not define SOFT_FP\n') else: print('Bad Argument', sys.argv[1]) exit(-1) f.write('#ifndef NO_FP_MACROS\n') for line in FPdef: line = line.rstrip('\r\n') # print(line) if line == '' or line[0] != '@': continue (macro, rm, fpx, soft, type, hard) = re.split('\t+', line) macro = macro[1:] macro_dyn = re.sub('\(\s*rm,\s*', '_dyn(', macro) # funcs = [ 'f32', 'f64', 'nf32', 'nf64', 'i32', 'ui32', 'i64', 'ui64' ] # for x in funcs: # soft = soft.replace('.'+x, '.'+x+'()') # funcs = [ 'l', 'ul', 'i', 'ui', 'd', 'f' ] # for x in funcs: # hard = hard.replace('.'+x, '.'+x) # hard = hard.replace('.'+x, '.'+x+'()') if (sys.argv[1] == 'soft'): (srm, fpx) = ('', '') if rm != '-': srm = ' SRM(rm);' rrm = ' SRM(cpu->state.fcsr.rmode);' if fpx != '-': fpx = ' SET_FPX;' f.write('#define {:s}{:s} {:s};{:s}{:s}\n'.format(macro, srm, soft, fpx, rrm)) if rm != '-': f.write('#define {:s} {:s};{:s}\n'.format(macro_dyn, soft, fpx)) elif (sys.argv[1] == 'hard'): (srm, rrm, fpx) = ('', '', '') if rm != '-': srm = ' SRM(rm);' rrm = ' RRM(rm);' if fpx != '-': fpx = ' SET_FPX;' f.write('#define {:s}{:s} {:s};{:s}{:s}\n'.format(macro, srm, hard, fpx, rrm)) if rm != '-': f.write('#define {:s} {:s};{:s}\n'.format(macro_dyn, hard, fpx)) f.write('#endif\n') f.close() FPdef.close()