def read_fd(fname): func_pat = "([A-Za-z][_A-Za-z00-9]+)\((.*)\)\((.*)\)" func_table = None bias = 0 private = True # parse file f = open(fname, "r") for line in f: l = line.strip() if len(l) > 1 and l[0] != '*': # a command if l[0] == '#' and l[1] == '#': cmdline = l[2:] cmda = cmdline.split(" ") cmd = cmda[0] if cmd == "base": base = cmda[1] func_table = FuncTable(base) elif cmd == "bias": bias = int(cmda[1]) elif cmd == "private": private = True elif cmd == "public": private = False elif cmd == "end": break else: print "Invalid command:",cmda return None # a function else: m = re.match(func_pat, l) if m == None: raise IOError("Invalid FD Format") else: name = m.group(1) # create a function definition func_def = FuncDef(name, bias, private) if func_table != None: func_table.add_func(func_def) # check args args = m.group(2) regs = m.group(3) arg = args.replace(',','/').split('/') reg = regs.replace(',','/').split('/') if len(arg) != len(reg): # hack for double reg args found in mathieeedoub* libs if len(arg) * 2 == len(reg): arg_hi = map(lambda x: x + "_hi", arg) arg_lo = map(lambda x: x + "_lo", arg) arg = [x for pair in zip(arg_hi, arg_lo) for x in pair] else: raise IOError("Reg and Arg name mismatch in FD File") if arg[0] != '': num_args = len(arg) for i in range(num_args): func_def.add_arg(arg[i],reg[i]) bias += 6 f.close() return func_table
def add_call(self, name, bias, arg, reg, is_std=False): if len(arg) != len(reg): raise IOError("Reg and Arg name mismatch in function definition") else: func_def = FuncDef(name, bias, False, is_std) self.add_func(func_def) if arg and len(arg) > 0: num_args = len(arg) for i in range(num_args): func_def.add_arg(arg[i], reg[i])
def add_call(self,name,bias,arg,reg,is_std=False): if len(arg) != len(reg): raise IOError("Reg and Arg name mismatch in function definition") else: func_def = FuncDef(name, bias, False, is_std) self.add_func(func_def) if arg and len(arg) > 0: num_args = len(arg) for i in range(num_args): func_def.add_arg(arg[i],reg[i])
def read_fd(fname): func_pat = "([A-Za-z][_A-Za-z00-9]+)\((.*)\)\((.*)\)" func_table = None bias = 0 private = True # parse file f = open(fname, "r") for line in f: l = line.strip() if len(l) > 1 and l[0] != '*': # a command if l[0] == '#' and l[1] == '#': cmdline = l[2:] cmda = cmdline.split(" ") cmd = cmda[0] if cmd == "base": base = cmda[1] func_table = FuncTable(base) elif cmd == "bias": bias = int(cmda[1]) elif cmd == "private": private = True elif cmd == "public": private = False elif cmd == "end": break else: print "Invalid command:", cmda return None # a function else: m = re.match(func_pat, l) if m == None: raise IOError("Invalid FD Format") else: name = m.group(1) # create a function definition func_def = FuncDef(name, bias, private) if func_table != None: func_table.add_func(func_def) # check args args = m.group(2) regs = m.group(3) arg = args.replace(',', '/').split('/') reg = regs.replace(',', '/').split('/') if len(arg) != len(reg): raise IOError("Reg and Arg name mismatch in FD File") else: if arg[0] != '': num_args = len(arg) for i in range(num_args): func_def.add_arg(arg[i], reg[i]) bias += 6 f.close() return func_table
def read_fd(fname): func_pat = "([A-Za-z][_A-Za-z00-9]+)\((.*)\)\((.*)\)" func_table = None bias = 0 private = True # parse file f = open(fname, "r") for line in f: l = line.strip() if len(l) > 1 and l[0] != '*': # a command if l[0] == '#' and l[1] == '#': cmdline = l[2:] cmda = cmdline.split(" ") cmd = cmda[0] if cmd == "base": base = cmda[1] func_table = FuncTable(base) elif cmd == "bias": bias = int(cmda[1]) elif cmd == "private": private = True elif cmd == "public": private = False elif cmd == "end": break else: print "Invalid command:", cmda return None # a function else: m = re.match(func_pat, l) if m == None: raise IOError("Invalid FD Format") else: name = m.group(1) # create a function definition func_def = FuncDef(name, bias, private) if func_table != None: func_table.add_func(func_def) # check args args = m.group(2) regs = m.group(3) arg = args.replace(',', '/').split('/') reg = regs.replace(',', '/').split('/') if len(arg) != len(reg): # hack for double reg args found in mathieeedoub* libs if len(arg) * 2 == len(reg): arg_hi = map(lambda x: x + "_hi", arg) arg_lo = map(lambda x: x + "_lo", arg) arg = [ x for pair in zip(arg_hi, arg_lo) for x in pair ] elif name == "IEEEDPSincos": # selco ugly hack for IEEEDPSincos() (Parameters is 1 + 2 registers) arg = ["fp2", "parm_hi", "parm_lo"] else: raise IOError( "Reg and Arg name mismatch in FD File") if arg[0] != '': num_args = len(arg) for i in range(num_args): func_def.add_arg(arg[i], reg[i]) bias += 6 f.close() return func_table