Raymond Toy pushed to branch issue-97-define-ud2-inst at cmucl / cmucl
Commits: 9c5cdf07 by Raymond Toy at 2021-05-20T21:18:44-07:00 Define separate int and int3 instructions.
Note that `(inst int 3)` is two bytes long and is not converted to an int3 instruction that is one byte long.
Tested by looking at the output of `disassem::print-backend-inst-space` and also by inserting a function-start breakpoint in `#'kernel:%sqrt` and disassembling the function. We see the `int3` instruction, and it is exactly one byte long.
- - - - -
1 changed file:
- src/compiler/x86/insts.lisp
Changes:
===================================== src/compiler/x86/insts.lisp ===================================== @@ -2161,15 +2161,14 @@ (define-instruction int (segment number) (:declare (type (unsigned-byte 8) number)) (:printer byte-imm ((op #b11001101))) - (:printer byte ((op #b11001100)) - `(:name 3)) - (:emitter - (etypecase number - ((member 3) - (emit-byte segment #b11001100)) - ((unsigned-byte 8) - (emit-byte segment #b11001101) - (emit-byte segment number))))) + (:emitter + (emit-byte segment #b11001101) + (emit-byte segment number))) + +(define-instruction int3 (segment) + (:printer byte ((op #b11001100))) + (:emitter + (emit-byte segment #b11001100)))
(define-instruction into (segment) (:printer byte ((op #b11001110)))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/9c5cdf0700fabcd09a09258a...