diff options
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r-- | libguile/vm-engine.c | 76 |
1 files changed, 71 insertions, 5 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index a70f78a1c..e07bf46e5 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -4100,11 +4100,77 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp, NEXT (1); } - VM_DEFINE_OP (218, unused_218, NULL, NOP) - VM_DEFINE_OP (219, unused_219, NULL, NOP) - VM_DEFINE_OP (220, unused_220, NULL, NOP) - VM_DEFINE_OP (221, unused_221, NULL, NOP) - VM_DEFINE_OP (222, unused_222, NULL, NOP) + VM_DEFINE_OP (218, s64_imm_numerically_equal, "s64-imm=?", OP1 (X8_S12_Z12)) + { + scm_t_uint16 a; + scm_t_int64 x, y; + + a = (op >> 8) & 0xfff; + x = SP_REF_S64 (a); + + y = ((scm_t_int32) op) >> 20; /* Sign extension. */ + + vp->compare_result = x == y ? SCM_F_COMPARE_EQUAL : SCM_F_COMPARE_NONE; + + NEXT (1); + } + + VM_DEFINE_OP (219, u64_imm_less, "u64-imm<?", OP1 (X8_S12_C12)) + { + scm_t_uint16 a; + scm_t_uint64 x, y; + + UNPACK_12_12 (op, a, y); + x = SP_REF_U64 (a); + + vp->compare_result = x < y ? SCM_F_COMPARE_LESS_THAN : SCM_F_COMPARE_NONE; + + NEXT (1); + } + + VM_DEFINE_OP (220, imm_u64_less, "imm-u64<?", OP1 (X8_S12_C12)) + { + scm_t_uint16 a; + scm_t_uint64 x, y; + + UNPACK_12_12 (op, a, x); + y = SP_REF_U64 (a); + + vp->compare_result = x < y ? SCM_F_COMPARE_LESS_THAN : SCM_F_COMPARE_NONE; + + NEXT (1); + } + + VM_DEFINE_OP (221, s64_imm_less, "s64-imm<?", OP1 (X8_S12_Z12)) + { + scm_t_uint16 a; + scm_t_int64 x, y; + + a = (op >> 8) & 0xfff; + x = SP_REF_S64 (a); + + y = ((scm_t_int32) op) >> 20; /* Sign extension. */ + + vp->compare_result = x < y ? SCM_F_COMPARE_LESS_THAN : SCM_F_COMPARE_NONE; + + NEXT (1); + } + + VM_DEFINE_OP (222, imm_s64_less, "imm-s64<?", OP1 (X8_S12_Z12)) + { + scm_t_uint16 a; + scm_t_int64 x, y; + + a = (op >> 8) & 0xfff; + y = SP_REF_S64 (a); + + x = ((scm_t_int32) op) >> 20; /* Sign extension. */ + + vp->compare_result = x < y ? SCM_F_COMPARE_LESS_THAN : SCM_F_COMPARE_NONE; + + NEXT (1); + } + VM_DEFINE_OP (223, unused_223, NULL, NOP) VM_DEFINE_OP (224, unused_224, NULL, NOP) VM_DEFINE_OP (225, unused_225, NULL, NOP) |