Skip to content

Commit

Permalink
#16 [asm] added or operator support
Browse files Browse the repository at this point in the history
  • Loading branch information
vityaman committed Feb 7, 2024
1 parent 6c8d5f4 commit 27a89c1
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 3 deletions.
7 changes: 5 additions & 2 deletions sleepy/asmik/emit.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,10 @@ def emit_intrinsic(
lhsr = self.reg_var(lhs)
rhsr = self.reg_var(rhs)
self.emit_i(Andb(dst, lhsr, rhsr))
case tafka.Or(lhs, rhs):
lhsr = self.reg_var(lhs)
rhsr = self.reg_var(rhs)
self.emit_i(Orb(dst, lhsr, rhsr))
case _:
raise NotImplementedError(str(source))

Expand All @@ -176,9 +180,8 @@ def emit_invokation(
prev_ra = self.reg_tmp()
self.emit_i(mov(prev_ra, Reg.ra()))

self.emit_i(Addim(Reg.ra(), Reg.ip(), Integer(4)))

proc_reg = self.reg_var(source.closure)
self.emit_i(Addim(Reg.ra(), Reg.ip(), Integer(4)))
self.emit_i(Brn(Reg.ze(), proc_reg))

res_reg = self.reg_var(target)
Expand Down
4 changes: 3 additions & 1 deletion sleepy/tafka/emit.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
)
from sleepy.tafka.representation import Conditional as TafConditional
from sleepy.tafka.representation import Kind as TafKind
from sleepy.tafka.representation.rvalue import And, Invokation
from sleepy.tafka.representation.rvalue import And, Invokation, Or

UniqueNameSequence = Generator[str, None, None]

Expand Down Expand Up @@ -137,6 +137,8 @@ def visit_application_intrinsic(
self.emit_intermidiate(Lt(args[0], args[1]))
case "and":
self.emit_intermidiate(And(args[0], args[1]))
case "or":
self.emit_intermidiate(Or(args[0], args[1]))
case _:
raise NotImplementedError(str(intrinsic))

Expand Down
1 change: 1 addition & 0 deletions sleepy/tafka/representation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
Load,
Lt,
Mul,
Or,
Rem,
RValue,
Sum,
Expand Down
12 changes: 12 additions & 0 deletions sleepy/tafka/representation/rvalue.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,3 +203,15 @@ def name(self) -> str:
@property
def value(self) -> Kind:
return Bool()

@dataclass(repr=False)
class Or(BinaryOperator):
@override
@property
def name(self) -> str:
return "or"

@override
@property
def value(self) -> Kind:
return Bool()

0 comments on commit 27a89c1

Please sign in to comment.