moved crates in lib/ to src/, renamed crates, modified some files' text (#660)
moved crates in lib/ to src/, renamed crates, modified some files' text (#660)
This commit is contained in:
45
cranelift/codegen/meta-python/semantics/macros.py
Normal file
45
cranelift/codegen/meta-python/semantics/macros.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""
|
||||
Useful semantics "macro" instructions built on top of
|
||||
the primitives.
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from cdsl.operands import Operand
|
||||
from cdsl.typevar import TypeVar
|
||||
from cdsl.instructions import Instruction, InstructionGroup
|
||||
from base.types import b1
|
||||
from base.immediates import imm64
|
||||
from cdsl.ast import Var
|
||||
from cdsl.xform import Rtl
|
||||
from semantics.primitives import bv_from_imm64, bvite
|
||||
import base.formats # noqa
|
||||
|
||||
GROUP = InstructionGroup("primitive_macros", "Semantic macros instruction set")
|
||||
AnyBV = TypeVar('AnyBV', bitvecs=True, doc="")
|
||||
x = Var('x')
|
||||
y = Var('y')
|
||||
imm = Var('imm')
|
||||
a = Var('a')
|
||||
|
||||
#
|
||||
# Bool-to-bv1
|
||||
#
|
||||
BV1 = TypeVar("BV1", bitvecs=(1, 1), doc="")
|
||||
bv1_op = Operand('bv1_op', BV1, doc="")
|
||||
cond_op = Operand("cond", b1, doc="")
|
||||
bool2bv = Instruction(
|
||||
'bool2bv', r"""Convert a b1 value to a 1-bit BV""",
|
||||
ins=cond_op, outs=bv1_op)
|
||||
|
||||
v1 = Var('v1')
|
||||
v2 = Var('v2')
|
||||
bvone = Var('bvone')
|
||||
bvzero = Var('bvzero')
|
||||
bool2bv.set_semantics(
|
||||
v1 << bool2bv(v2),
|
||||
Rtl(
|
||||
bvone << bv_from_imm64(imm64(1)),
|
||||
bvzero << bv_from_imm64(imm64(0)),
|
||||
v1 << bvite(v2, bvone, bvzero)
|
||||
))
|
||||
|
||||
GROUP.close()
|
||||
Reference in New Issue
Block a user