summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-23 21:44:22 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-23 21:44:22 -0700
commit4eb3be4a62a87e92d3ad674825611b340c1c38e5 (patch)
treeff1772113eba6b0fc15cd66bd5c20a5aa35b816f
parent19eb7cd0248775b847daaa6e69949f82661167b6 (diff)
downloadtxr-4eb3be4a62a87e92d3ad674825611b340c1c38e5.tar.gz
txr-4eb3be4a62a87e92d3ad674825611b340c1c38e5.tar.bz2
txr-4eb3be4a62a87e92d3ad674825611b340c1c38e5.zip
asm: report instruction count in disassembly.
* share/txr/stdlib/asm.tl (assembler dis-listing): Return the number of instructions that were traversed. (disassemble-c-d): Print count after instruction listing.
-rw-r--r--share/txr/stdlib/asm.tl9
1 files changed, 7 insertions, 2 deletions
diff --git a/share/txr/stdlib/asm.tl b/share/txr/stdlib/asm.tl
index 34eeed45..b6e8dff5 100644
--- a/share/txr/stdlib/asm.tl
+++ b/share/txr/stdlib/asm.tl
@@ -203,18 +203,21 @@
(defmeth assembler dis-listing (me : (stream *stdout*))
(let ((p 0)
+ (c 0)
(l (len me.buf)))
me.(set-pos p)
(while (< p l)
(let* ((dis me.(dis-one))
(dis-txt (cat-str [mapcar tostringp dis] " "))
(q me.(cur-pos)))
+ (inc c)
me.(set-pos p)
(format t "~,5d: ~,08X ~a\n" (trunc p 4) me.(get-word) dis-txt)
(while (< (inc p 4) q)
(format t "~,5d: ~,08X\n" (trunc p 4) me.(get-word)))
me.(set-pos q)
- (set p q)))))
+ (set p q)))
+ c))
(defvarl %oc-list-builder% (new list-builder))
@@ -670,7 +673,9 @@
(put-line "funs:")
(mapdo (do format t "~5d: ~s\n" @1 @2) (range 0) funv)
(put-line "code:")
- asm.(dis-listing)))
+ (let ((ninsn asm.(dis-listing)))
+ (put-line "instruction count:")
+ (format t "~5d\n" ninsn))))
(defun usr:disassemble (obj : (stream *stdout*))
(typecase obj