Created
December 27, 2017 23:51
-
-
Save death/665262a6585d68356095adc28c094f26 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CL-USER> (defun bool-case (x) (case x ((nil) nil) (t t))) | |
BOOL-CASE | |
CL-USER> (defun bool-if (x) (if x t nil)) | |
BOOL-IF | |
CL-USER> (constantia:sxs () | |
(disassemble #'bool-case) | |
(disassemble #'bool-if)) | |
1: ; disassembly for BOOL-CASE | ; disassembly for BOOL-IF | |
2: ; Size: 36 bytes. Origin: #x1005421120 | ; Size: 33 bytes. Origin: #x10054211B0 | |
3: ; 20: 498B4C2460 MOV RCX, [R12+96] ; no-arg-parsing entry point | ; B0: 498B542460 MOV RDX, [R12+96] ; no-arg-parsing entry point | |
4: ; thread.binding-stack-pointer | ; thread.binding-stack-pointer | |
5: ; 25: 48894DF8 MOV [RBP-8], RCX | ; B5: 488955F8 MOV [RBP-8], RDX | |
6: ; 29: 488BDE MOV RBX, RSI | ; B9: 4881F917001020 CMP RCX, #x20100017 ; NIL | |
7: ; 2C: 4881FB17001020 CMP RBX, #x20100017 ; NIL | ; C0: BA4F001020 MOV EDX, #x2010004F ; T | |
8: ; 33: BA4F001020 MOV EDX, #x2010004F ; T | ; C5: 480F44D1 CMOVEQ RDX, RCX | |
9: ; 38: 480F44D3 CMOVEQ RDX, RBX | ; C9: 488BE5 MOV RSP, RBP | |
10: ; 3C: 488BE5 MOV RSP, RBP | ; CC: F8 CLC | |
11: ; 3F: F8 CLC | ; CD: 5D POP RBP | |
12: ; 40: 5D POP RBP | ; CE: C3 RET | |
13: ; 41: C3 RET | ; CF: CC10 BREAK 16 ; Invalid argument count trap | |
14: ; 42: CC10 BREAK 16 ; Invalid argument count trap | | |
NIL |
jasom
commented
Dec 27, 2017
(defun same-code-p (fn1 fn2)
(equal (chunks fn1) (chunks fn2)))
(defun chunks (fn)
(setf fn (coerce fn 'function))
(let ((dstate (sb-disassem:make-dstate))
(segments (sb-disassem:get-fun-segments fn))
(chunks '()))
(dolist (s segments)
(sb-disassem:map-segment-instructions
(lambda (chunk inst)
(declare (ignore inst))
(push chunk chunks))
s dstate))
(nreverse chunks)))
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment