[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 03/24: Remove specific instructions for add, etc from VM
From: |
Andy Wingo |
Subject: |
[Guile-commits] 03/24: Remove specific instructions for add, etc from VM |
Date: |
Tue, 10 Apr 2018 13:24:12 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit bb1ff0e78a97596a970b17ab99eb9ac8f8359575
Author: Andy Wingo <address@hidden>
Date: Sat Mar 31 01:40:47 2018 +0200
Remove specific instructions for add, etc from VM
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Treat add, sub, and so on as known primitives.
* libguile/vm-engine.c: Remove code for now-unused instructions.
---
libguile/vm-engine.c | 182 ++-----------------------------
module/language/cps/reify-primitives.scm | 14 ++-
2 files changed, 25 insertions(+), 171 deletions(-)
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index c7407ef..fd68148 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -2211,177 +2211,19 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
VM_DEFINE_OP (83, unused_83, NULL, NOP)
VM_DEFINE_OP (84, unused_84, NULL, NOP)
VM_DEFINE_OP (85, unused_85, NULL, NOP)
- {
- vm_error_bad_instruction (op);
- abort (); /* never reached */
- }
-
-
-
- /*
- * Numeric operations
- */
-
- /* add dst:8 a:8 b:8
- *
- * Add A to B, and place the result in DST.
- */
- VM_DEFINE_OP (86, add, "add", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- BINARY_INTEGER_OP (+, scm_sum);
- }
-
- /* add/immediate dst:8 src:8 imm:8
- *
- * Add the unsigned 8-bit value IMM to the value from SRC, and place
- * the result in DST.
- */
- VM_DEFINE_OP (87, add_immediate, "add/immediate", OP1 (X8_S8_S8_C8) | OP_DST)
- {
- scm_t_uint8 dst, src, imm;
- SCM x;
-
- UNPACK_8_8_8 (op, dst, src, imm);
- x = SP_REF (src);
-
- if (SCM_LIKELY (SCM_I_INUMP (x)))
- {
- scm_t_signed_bits sum = SCM_I_INUM (x) + (scm_t_signed_bits) imm;
-
- if (SCM_LIKELY (SCM_POSFIXABLE (sum)))
- RETURN (SCM_I_MAKINUM (sum));
- }
-
- RETURN_EXP (scm_sum (x, SCM_I_MAKINUM (imm)));
- }
-
- /* sub dst:8 a:8 b:8
- *
- * Subtract B from A, and place the result in DST.
- */
- VM_DEFINE_OP (88, sub, "sub", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- BINARY_INTEGER_OP (-, scm_difference);
- }
-
- /* sub/immediate dst:8 src:8 imm:8
- *
- * Subtract the unsigned 8-bit value IMM from the value in SRC, and
- * place the result in DST.
- */
- VM_DEFINE_OP (89, sub_immediate, "sub/immediate", OP1 (X8_S8_S8_C8) | OP_DST)
- {
- scm_t_uint8 dst, src, imm;
- SCM x;
-
- UNPACK_8_8_8 (op, dst, src, imm);
- x = SP_REF (src);
-
- if (SCM_LIKELY (SCM_I_INUMP (x)))
- {
- scm_t_signed_bits diff = SCM_I_INUM (x) - (scm_t_signed_bits) imm;
-
- if (SCM_LIKELY (SCM_NEGFIXABLE (diff)))
- RETURN (SCM_I_MAKINUM (diff));
- }
-
- RETURN_EXP (scm_difference (x, SCM_I_MAKINUM (imm)));
- }
-
- /* mul dst:8 a:8 b:8
- *
- * Multiply A and B, and place the result in DST.
- */
- VM_DEFINE_OP (90, mul, "mul", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- RETURN_EXP (scm_product (x, y));
- }
-
- /* div dst:8 a:8 b:8
- *
- * Divide A by B, and place the result in DST.
- */
- VM_DEFINE_OP (91, div, "div", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- RETURN_EXP (scm_divide (x, y));
- }
-
- /* quo dst:8 a:8 b:8
- *
- * Divide A by B, and place the quotient in DST.
- */
- VM_DEFINE_OP (92, quo, "quo", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- RETURN_EXP (scm_quotient (x, y));
- }
-
- /* rem dst:8 a:8 b:8
- *
- * Divide A by B, and place the remainder in DST.
- */
- VM_DEFINE_OP (93, rem, "rem", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- RETURN_EXP (scm_remainder (x, y));
- }
-
- /* mod dst:8 a:8 b:8
- *
- * Place the modulo of A by B in DST.
- */
- VM_DEFINE_OP (94, mod, "mod", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- RETURN_EXP (scm_modulo (x, y));
- }
-
+ VM_DEFINE_OP (86, unused_86, NULL, NOP)
+ VM_DEFINE_OP (87, unused_87, NULL, NOP)
+ VM_DEFINE_OP (88, unused_88, NULL, NOP)
+ VM_DEFINE_OP (89, unused_89, NULL, NOP)
+ VM_DEFINE_OP (90, unused_90, NULL, NOP)
+ VM_DEFINE_OP (91, unused_91, NULL, NOP)
+ VM_DEFINE_OP (92, unused_92, NULL, NOP)
+ VM_DEFINE_OP (93, unused_93, NULL, NOP)
+ VM_DEFINE_OP (94, unused_94, NULL, NOP)
VM_DEFINE_OP (95, unused_95, NULL, NOP)
- {
- vm_error_bad_instruction (op);
- abort (); /* never reached */
- }
-
- /* logand dst:8 a:8 b:8
- *
- * Place the bitwise AND of A and B into DST.
- */
- VM_DEFINE_OP (96, logand, "logand", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- if (SCM_I_INUMP (x) && SCM_I_INUMP (y))
- /* Compute bitwise AND without untagging */
- RETURN (SCM_PACK (SCM_UNPACK (x) & SCM_UNPACK (y)));
- RETURN_EXP (scm_logand (x, y));
- }
-
- /* logior dst:8 a:8 b:8
- *
- * Place the bitwise inclusive OR of A with B in DST.
- */
- VM_DEFINE_OP (97, logior, "logior", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- if (SCM_I_INUMP (x) && SCM_I_INUMP (y))
- /* Compute bitwise OR without untagging */
- RETURN (SCM_PACK (SCM_UNPACK (x) | SCM_UNPACK (y)));
- RETURN_EXP (scm_logior (x, y));
- }
-
- /* logxor dst:8 a:8 b:8
- *
- * Place the bitwise exclusive OR of A with B in DST.
- */
- VM_DEFINE_OP (98, logxor, "logxor", OP1 (X8_S8_S8_S8) | OP_DST)
- {
- ARGS2 (x, y);
- if (SCM_I_INUMP (x) && SCM_I_INUMP (y))
- RETURN (SCM_I_MAKINUM (SCM_I_INUM (x) ^ SCM_I_INUM (y)));
- RETURN_EXP (scm_logxor (x, y));
- }
-
+ VM_DEFINE_OP (96, unused_96, NULL, NOP)
+ VM_DEFINE_OP (97, unused_97, NULL, NOP)
+ VM_DEFINE_OP (98, unused_98, NULL, NOP)
VM_DEFINE_OP (99, unused_99, NULL, NOP)
VM_DEFINE_OP (100, unused_100, NULL, NOP)
VM_DEFINE_OP (101, unused_101, NULL, NOP)
diff --git a/module/language/cps/reify-primitives.scm
b/module/language/cps/reify-primitives.scm
index 7436422..4e5bd5d 100644
--- a/module/language/cps/reify-primitives.scm
+++ b/module/language/cps/reify-primitives.scm
@@ -200,7 +200,19 @@
;; not ephemeral should be handled by compile-bytecode.
(define (compute-known-primitives)
(define *macro-instructions*
- '(u64->s64
+ '(add
+ add/immediate
+ sub
+ sub/immediate
+ mul
+ div
+ quo
+ rem
+ mod
+ logand
+ logior
+ logxor
+ u64->s64
s64->u64
cache-current-module!
cached-toplevel-box
- [Guile-commits] branch master updated (98fc9c0 -> 59f1f5a), Andy Wingo, 2018/04/10
- [Guile-commits] 04/24: CPS conversion lowers string-length, Andy Wingo, 2018/04/10
- [Guile-commits] 10/24: Remove string-set! VM op, Andy Wingo, 2018/04/10
- [Guile-commits] 07/24: Remove now-unused string-length, string-ref, Andy Wingo, 2018/04/10
- [Guile-commits] 03/24: Remove specific instructions for add, etc from VM,
Andy Wingo <=
- [Guile-commits] 06/24: Lower string-ref in CPS conversion, Andy Wingo, 2018/04/10
- [Guile-commits] 11/24: Instruction explosion for integer->char, Andy Wingo, 2018/04/10
- [Guile-commits] 16/24: Add load-label instruction, Andy Wingo, 2018/04/10
- [Guile-commits] 21/24: Add string->number etc as macro instructions to reify-primitives, Andy Wingo, 2018/04/10
- [Guile-commits] 12/24: Remove integer->char op, Andy Wingo, 2018/04/10
- [Guile-commits] 13/24: Instruction explosion for char->integer, Andy Wingo, 2018/04/10
- [Guile-commits] 05/24: Add VM ops needed for string-ref, Andy Wingo, 2018/04/10
- [Guile-commits] 01/24: Add instrinsics to runtime, Andy Wingo, 2018/04/10
- [Guile-commits] 02/24: Compile some generic arithmetic to intrinsic calls, Andy Wingo, 2018/04/10
- [Guile-commits] 23/24: Remove class-of opcode, Andy Wingo, 2018/04/10