Get or3 working
This commit is contained in:
parent
96cbc75be2
commit
c484691aca
2 changed files with 64 additions and 6 deletions
|
@ -89,7 +89,49 @@ OR2 = BOOTSTRAP.define_function(
|
||||||
)
|
)
|
||||||
|
|
||||||
_b = FuncBuilder()
|
_b = FuncBuilder()
|
||||||
_b.write(isa.BREAK())
|
# Capture args
|
||||||
|
_x = _b.mark_argument()
|
||||||
|
_y = _b.mark_argument()
|
||||||
|
_z = _b.mark_argument()
|
||||||
|
|
||||||
|
# Const
|
||||||
|
_b.write(isa.IDENTIFIERC("bool"))
|
||||||
|
_b.write(isa.TYPEREF())
|
||||||
|
_bool_t = _b.mark_slot()
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_bool_t))
|
||||||
|
_b.write(isa.IDENTIFIERC("true"))
|
||||||
|
_b.write(isa.ARMREF())
|
||||||
|
_true_t = _b.mark_slot()
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_bool_t))
|
||||||
|
_b.write(isa.IDENTIFIERC("false"))
|
||||||
|
_b.write(isa.ARMREF())
|
||||||
|
_false_t = _b.mark_slot()
|
||||||
|
|
||||||
|
# x: Bool, x: Bool -> Bool
|
||||||
|
_true_l = _b.make_label()
|
||||||
|
_b.write(isa.SLOT(_x))
|
||||||
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
_b.write(isa.ATEST(_true_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_y))
|
||||||
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
_b.write(isa.ATEST(_true_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_z))
|
||||||
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
_b.write(isa.ATEST(_true_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ARM(0))
|
||||||
|
_b.write(isa.RETURN())
|
||||||
|
|
||||||
|
_b.write(_true_l)
|
||||||
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
_b.write(isa.ARM(0))
|
||||||
|
_b.write(isa.RETURN())
|
||||||
|
|
||||||
|
|
||||||
OR3 = BOOTSTRAP.define_function(
|
OR3 = BOOTSTRAP.define_function(
|
||||||
f";or;{BOOL},{BOOL},{BOOL};{BOOL}",
|
f";or;{BOOL},{BOOL},{BOOL};{BOOL}",
|
||||||
|
|
|
@ -7,7 +7,7 @@ from ichor.bootstrap import (
|
||||||
FALSE,
|
FALSE,
|
||||||
NOT1,
|
NOT1,
|
||||||
OR2,
|
OR2,
|
||||||
OR2_INSTRS,
|
OR3,
|
||||||
TRUE,
|
TRUE,
|
||||||
)
|
)
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -32,10 +32,7 @@ def test_not(vm, stack, ret):
|
||||||
[[FALSE, TRUE], [TRUE]],
|
[[FALSE, TRUE], [TRUE]],
|
||||||
[[TRUE, TRUE], [TRUE]],
|
[[TRUE, TRUE], [TRUE]],
|
||||||
])
|
])
|
||||||
def test_or(vm, stack, ret):
|
def test_or2(vm, stack, ret):
|
||||||
for idx, i in zip(range(512), OR2_INSTRS):
|
|
||||||
print(f"{idx:>3} {i}")
|
|
||||||
|
|
||||||
assert vm.run([
|
assert vm.run([
|
||||||
isa.IDENTIFIERC(OR2),
|
isa.IDENTIFIERC(OR2),
|
||||||
isa.FUNREF(),
|
isa.FUNREF(),
|
||||||
|
@ -43,6 +40,25 @@ def test_or(vm, stack, ret):
|
||||||
isa.RETURN()
|
isa.RETURN()
|
||||||
], stack = stack) == ret
|
], stack = stack) == ret
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("stack,ret", [
|
||||||
|
[[FALSE, FALSE, FALSE], [FALSE]],
|
||||||
|
[[TRUE, FALSE, FALSE], [TRUE]],
|
||||||
|
[[FALSE, TRUE, FALSE], [TRUE]],
|
||||||
|
[[FALSE, FALSE, TRUE], [TRUE]],
|
||||||
|
|
||||||
|
[[TRUE, TRUE, FALSE], [TRUE]],
|
||||||
|
[[TRUE, FALSE, TRUE], [TRUE]],
|
||||||
|
[[FALSE, TRUE, TRUE], [TRUE]],
|
||||||
|
[[TRUE, TRUE, TRUE], [TRUE]],
|
||||||
|
])
|
||||||
|
def test_or3(vm, stack, ret):
|
||||||
|
assert vm.run([
|
||||||
|
isa.IDENTIFIERC(OR3),
|
||||||
|
isa.FUNREF(),
|
||||||
|
isa.CALLF(3),
|
||||||
|
isa.RETURN()
|
||||||
|
], stack = stack) == ret
|
||||||
|
|
||||||
|
|
||||||
# @pytest.mark.parametrize("stack,ret", [
|
# @pytest.mark.parametrize("stack,ret", [
|
||||||
# [[False, False], [False]],
|
# [[False, False], [False]],
|
||||||
|
|
Loading…
Reference in a new issue