Add zext and ptrtoint.

This commit is contained in:
cfreksen 2017-10-29 19:39:09 +01:00
parent 4aeb986d75
commit b509ba2595
No known key found for this signature in database
GPG Key ID: EAC13EE101008978
2 changed files with 28 additions and 0 deletions

8
ll.py
View File

@ -102,6 +102,14 @@ def insn2s(insn):
return ('icmp {} {} {}, {}' return ('icmp {} {} {}, {}'
.format(insn.cnd, ty2s(insn.ty), .format(insn.cnd, ty2s(insn.ty),
oper2s(insn.left), oper2s(insn.right))) oper2s(insn.left), oper2s(insn.right)))
elif isinstance(insn, Zext):
return ('zext {} {} to {}'
.format(ty2s(insn.from_ty), oper2s(insn.oper),
ty2s(insn.to_ty)))
elif isinstance(insn, Ptrtoint):
return ('ptrtoint {}* {} to {}'
.format(ty2s(insn.pointer_ty), oper2s(insn.oper),
ty2s(insn.to_ty)))
else: else:
# TODO # TODO
print('insn2s: Unknown insn: {}' print('insn2s: Unknown insn: {}'

View File

@ -51,6 +51,26 @@ def step(insns, terminator, blocks, stack_frames, ssa_env, global_env, memory,
# TODO # TODO
print('icmp {} {}, {}' print('icmp {} {}, {}'
.format(cnd, left_v, right_v)) .format(cnd, left_v, right_v))
elif isinstance(next_insn, ll.Zext):
oper = next_insn.oper
from_ty = next_insn.from_ty
to_ty = next_insn.to_ty
oper_v = eval_oper(oper, ssa_env, global_env)
res = oper_v
# TODO
print('zext {} {} to {}'
.format(ll.ty2s(from_ty), oper_v, ll.ty2s(to_ty)))
elif isinstance(next_insn, ll.Ptrtoint):
oper = next_insn.oper
pointer_ty = next_insn.pointer_ty
to_ty = next_insn.to_ty
oper_v = eval_oper(oper, ssa_env, global_env)
res = oper_v
# TODO
print('ptrtoint {}* {} to {}'
.format(ll.ty2s(pointer_ty), oper_v, ll.ty2s(to_ty)))
else: else:
err('Unknown LLVM instruction: {}' err('Unknown LLVM instruction: {}'
.format(next_insn)) .format(next_insn))