Skip to content

Instantly share code, notes, and snippets.

@jasom
Created March 15, 2022 18:46
Show Gist options
  • Save jasom/dbe98cb860442c481c9e4cc5b6da8b69 to your computer and use it in GitHub Desktop.
Save jasom/dbe98cb860442c481c9e4cc5b6da8b69 to your computer and use it in GitHub Desktop.
Fixnum limited version of mask-signed
(defun mask-signed-2 (x size)
(declare (type fixnum x)
(type (integer 1 63) size)
(optimize (speed 3)))
(logior x (- (mask-field (byte 1 (1- size)) x))))
@jasom
Copy link
Author

jasom commented Mar 15, 2022

; disassembly for MASK-SIGNED-2
; Size: 70 bytes. Origin: #x536028D1                          ; MASK-SIGNED-2
; 8D1:       4883C1FE         ADD RCX, -2
; 8D5:       48D1F9           SAR RCX, 1
; 8D8:       B801000000       MOV EAX, 1
; 8DD:       48D3E0           SHL RAX, CL
; 8E0:       488BD3           MOV RDX, RBX
; 8E3:       48231596FFFFFF   AND RDX, [RIP-106]              ; [#x53602880] = #x7FFFFFFFFFFFFFFF
; 8EA:       4823058FFFFFFF   AND RAX, [RIP-113]              ; [#x53602880] = #x7FFFFFFFFFFFFFFF
; 8F1:       4821C2           AND RDX, RAX
; 8F4:       48F7DA           NEG RDX
; 8F7:       488BC3           MOV RAX, RBX
; 8FA:       4809D0           OR RAX, RDX
; 8FD:       488BD0           MOV RDX, RAX
; 900:       48D1E2           SHL RDX, 1
; 903:       710A             JNO L0
; 905:       488BD0           MOV RDX, RAX
; 908:       FF14256801A052   CALL QWORD PTR [#x52A00168]     ; ALLOC-SIGNED-BIGNUM-IN-RDX
; 90F: L0:   488BE5           MOV RSP, RBP
; 912:       F8               CLC
; 913:       5D               POP RBP
; 914:       C3               RET
; 915:       CC10             INT3 16                         ; Invalid argument count trap

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment