name = arg.id
if name in regs + fregs:
read_regs.add(name)
+ # special-case, function named "SVSTATE_NEXT" must be made "self.xxxx"
+ if atom.id == 'SVSTATE_NEXT':
+ name = ast.Name("self", ast.Load())
+ atom = ast.Attribute(name, atom, ast.Load())
return ast.Call(atom, trailer[1], [])
# if p[1].id == 'print':
# p[0] = ast.Printnl(ast.Tuple(p[2][1]), None, None)
| expr_stmt"""
if isinstance(p[1], ast.Call):
p[0] = ast.Expr(p[1])
- elif isinstance(p[1], ast.Name) and p[1].id == 'TRAP':
- # TRAP needs to actually be a function
+ elif isinstance(p[1], ast.Name) and p[1].id in ['TRAP', 'SVSTATE_NEXT']:
+ fname = p[1].id
+ # TRAP and SVSTATE_NEXT needs to actually be a function
name = ast.Name("self", ast.Load())
- name = ast.Attribute(name, "TRAP", ast.Load())
+ name = ast.Attribute(name, fname, ast.Load())
p[0] = ast.Call(name, [], [])
else:
p[0] = p[1]
if name in ['CA', 'CA32']:
self.write_regs.add(name)
if name in ['CR', 'LR', 'CTR', 'TAR', 'FPSCR', 'MSR',
- 'SVSTATE', 'SVSHAPE0', 'SVSHAPE1', 'SVSHAPE2', 'SVSHAPE3']:
+ 'SVSTATE', 'SVREMAP',
+ 'SVSHAPE0', 'SVSHAPE1', 'SVSHAPE2', 'SVSHAPE3']:
self.special_regs.add(name)
self.write_regs.add(name) # and add to list to write
p[0] = ast.Name(id=name, ctx=ast.Load())