Skip to content

Commit

Permalink
optimized project operations
Browse files Browse the repository at this point in the history
  • Loading branch information
cantora committed Dec 11, 2012
1 parent 7c62557 commit b08afb6
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
20 changes: 20 additions & 0 deletions pyc_asm_list.py
Expand Up @@ -109,6 +109,26 @@ def set_var_to_ir_fn(self, node, var, var_tbl):
var_tbl
)

def set_var_to_ProjectToInt(self, node, var, var_tbl):
return self.set_var_to_project(node, var, var_tbl)

def set_var_to_ProjectToBool(self, node, var, var_tbl):
return self.set_var_to_project(node, var, var_tbl)

def set_var_to_ProjectToBig(self, node, var, var_tbl):
op = self.se_to_operand(node.arg, var_tbl)
return [
Mov(op, var),
And(Immed(HexInt(0xfffffffc)), var)
]

def set_var_to_project(self, node, var, var_tbl):
op = self.se_to_operand(node.arg, var_tbl)
return [
Mov(op, var),
Sarl(Immed(HexInt(2)), var)
]

def set_var_to_InjectFromBig(self, node, var, var_tbl):
op = self.se_to_operand(node.arg, var_tbl)
return [
Expand Down
11 changes: 10 additions & 1 deletion pyc_asm_nodes.py
Expand Up @@ -345,14 +345,23 @@ def __str__(self):
return self.inst_join(["pop", str(self.operand)])

class Sall(Inst):
def __init__(self, operand, amt):
def __init__(self, amt, operand):
Inst.__init__(self)
self.read_operand('amt', amt)
self.read_write_operand('operand', operand)

def __str__(self):
return self.inst_join(["sall", "%s, %s" % (str(self.amt), str(self.operand) ) ])

class Sarl(Inst):
def __init__(self, amt, operand):
Inst.__init__(self)
self.read_operand('amt', amt)
self.read_write_operand('operand', operand)

def __str__(self):
return self.inst_join(["sarl", "%s, %s" % (str(self.amt), str(self.operand) ) ])

class And(Inst):
def __init__(self, left, right):
Inst.__init__(self)
Expand Down

0 comments on commit b08afb6

Please sign in to comment.