Get or3 working

This commit is contained in:
Reid 'arrdem' McKenzie 2022-08-17 00:11:01 -06:00
parent 96cbc75be2
commit c484691aca
2 changed files with 64 additions and 6 deletions

View file

@ -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}",

View file

@ -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]],