Get and2/3 working
This commit is contained in:
parent
77340aeb3b
commit
71a60ae079
2 changed files with 113 additions and 17 deletions
|
@ -64,7 +64,7 @@ _b.write(isa.IDENTIFIERC("false"))
|
||||||
_b.write(isa.ARMREF())
|
_b.write(isa.ARMREF())
|
||||||
_false_t = _b.mark_slot()
|
_false_t = _b.mark_slot()
|
||||||
|
|
||||||
# x: Bool, x: Bool -> Bool
|
# x: Bool, y: Bool -> Bool
|
||||||
_true_l = _b.make_label()
|
_true_l = _b.make_label()
|
||||||
_b.write(isa.SLOT(_x))
|
_b.write(isa.SLOT(_x))
|
||||||
_b.write(isa.SLOT(_true_t))
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
@ -109,7 +109,7 @@ _b.write(isa.IDENTIFIERC("false"))
|
||||||
_b.write(isa.ARMREF())
|
_b.write(isa.ARMREF())
|
||||||
_false_t = _b.mark_slot()
|
_false_t = _b.mark_slot()
|
||||||
|
|
||||||
# x: Bool, x: Bool -> Bool
|
# x: Bool, y: Bool, z: Bool -> Bool
|
||||||
_true_l = _b.make_label()
|
_true_l = _b.make_label()
|
||||||
_b.write(isa.SLOT(_x))
|
_b.write(isa.SLOT(_x))
|
||||||
_b.write(isa.SLOT(_true_t))
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
@ -139,7 +139,43 @@ OR3 = BOOTSTRAP.define_function(
|
||||||
)
|
)
|
||||||
|
|
||||||
_b = FuncBuilder()
|
_b = FuncBuilder()
|
||||||
_b.write(isa.BREAK())
|
# Capture args
|
||||||
|
_x = _b.mark_argument()
|
||||||
|
_y = _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
|
||||||
|
_false_l = _b.make_label()
|
||||||
|
_b.write(isa.SLOT(_x))
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ATEST(_false_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_y))
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ATEST(_false_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
_b.write(isa.ARM(0))
|
||||||
|
_b.write(isa.RETURN())
|
||||||
|
|
||||||
|
_b.write(_false_l)
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ARM(0))
|
||||||
|
_b.write(isa.RETURN())
|
||||||
|
|
||||||
AND2 = BOOTSTRAP.define_function(
|
AND2 = BOOTSTRAP.define_function(
|
||||||
f";and;{BOOL},{BOOL};{BOOL}",
|
f";and;{BOOL},{BOOL};{BOOL}",
|
||||||
|
@ -147,7 +183,49 @@ AND2 = BOOTSTRAP.define_function(
|
||||||
)
|
)
|
||||||
|
|
||||||
_b = FuncBuilder()
|
_b = FuncBuilder()
|
||||||
_b.write(isa.BREAK())
|
_b = FuncBuilder()
|
||||||
|
# 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
|
||||||
|
_false_l = _b.make_label()
|
||||||
|
_b.write(isa.SLOT(_x))
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ATEST(_false_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_y))
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ATEST(_false_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_z))
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ATEST(_false_l))
|
||||||
|
|
||||||
|
_b.write(isa.SLOT(_true_t))
|
||||||
|
_b.write(isa.ARM(0))
|
||||||
|
_b.write(isa.RETURN())
|
||||||
|
|
||||||
|
_b.write(_false_l)
|
||||||
|
_b.write(isa.SLOT(_false_t))
|
||||||
|
_b.write(isa.ARM(0))
|
||||||
|
_b.write(isa.RETURN())
|
||||||
|
|
||||||
AND3 = BOOTSTRAP.define_function(
|
AND3 = BOOTSTRAP.define_function(
|
||||||
f";and;{BOOL},{BOOL},{BOOL};{BOOL}",
|
f";and;{BOOL},{BOOL},{BOOL};{BOOL}",
|
||||||
|
|
|
@ -9,6 +9,8 @@ from ichor.bootstrap import (
|
||||||
OR2,
|
OR2,
|
||||||
OR3,
|
OR3,
|
||||||
TRUE,
|
TRUE,
|
||||||
|
AND2,
|
||||||
|
AND3
|
||||||
)
|
)
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
@ -60,19 +62,35 @@ def test_or3(vm, stack, ret):
|
||||||
], stack = stack) == ret
|
], stack = stack) == ret
|
||||||
|
|
||||||
|
|
||||||
# @pytest.mark.parametrize("stack,ret", [
|
@pytest.mark.parametrize("stack,ret", [
|
||||||
# [[False, False], [False]],
|
[[FALSE, FALSE], [FALSE]],
|
||||||
# [[True, False], [False]],
|
[[TRUE, FALSE], [FALSE]],
|
||||||
# [[False, True], [False]],
|
[[FALSE, TRUE], [FALSE]],
|
||||||
# [[True, True], [True]],
|
[[TRUE, TRUE], [TRUE]],
|
||||||
# ])
|
])
|
||||||
# def test_and(vm, stack, ret):
|
def test_and2(vm, stack, ret):
|
||||||
# assert vm.run([
|
assert vm.run([
|
||||||
# isa.IDENTIFIERC(AND2),
|
isa.IDENTIFIERC(AND2),
|
||||||
# isa.FUNREF(),
|
isa.FUNREF(),
|
||||||
# isa.CALLF(2),
|
isa.CALLF(2),
|
||||||
# isa.RETURN(1)
|
isa.RETURN()
|
||||||
# ], stack = stack) == ret
|
], stack = stack) == ret
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("stack,ret", [
|
||||||
|
[[FALSE, FALSE, FALSE], [FALSE]],
|
||||||
|
[[TRUE, FALSE, FALSE], [FALSE]],
|
||||||
|
[[FALSE, TRUE, FALSE], [FALSE]],
|
||||||
|
[[TRUE, TRUE, FALSE], [FALSE]],
|
||||||
|
[[TRUE, TRUE, TRUE], [TRUE]],
|
||||||
|
])
|
||||||
|
def test_and3(vm, stack, ret):
|
||||||
|
assert vm.run([
|
||||||
|
isa.IDENTIFIERC(AND3),
|
||||||
|
isa.FUNREF(),
|
||||||
|
isa.CALLF(3),
|
||||||
|
isa.RETURN()
|
||||||
|
], stack = stack) == ret
|
||||||
|
|
||||||
|
|
||||||
# @pytest.mark.parametrize("stack,ret", [
|
# @pytest.mark.parametrize("stack,ret", [
|
||||||
|
|
Loading…
Reference in a new issue