Please sign in to comment.
x86-64: Add better abstraction for CPU register in the assembler
Any TN which refers to a register is converted to an instance of REG just prior to calling the instruction emitter. This makes it simple to distinguish registers from stack locations. Additionally the function which returns a register in a different size no longer has anything to do with the VM's storage classes. We can henceforth remove all of the global variables which hold TNs in sizes other than :qword (e.g. AL-TN, AX-TN, EAX-TN) and we can probably remove their storage classes, except for potential problems with third-party libraries that use define-vop and assume that they can request vop temporaries in arbitrary sizes.
- Loading branch information...
Showing with 292 additions and 182 deletions.
- +4 −3 make-target-2-load.lisp
- +10 −2 src/compiler/assem.lisp
- +4 −4 src/compiler/x86-64/arith.lisp
- +2 −4 src/compiler/x86-64/float.lisp
- +235 −151 src/compiler/x86-64/insts.lisp
- +21 −4 src/compiler/x86-64/macros.lisp
- +1 −1 src/compiler/x86-64/move.lisp
- +3 −2 src/compiler/x86-64/target-insts.lisp
- +8 −9 src/compiler/x86-64/vm.lisp
- +2 −1 tests/assembler.pure.lisp
- +2 −1 tests/call-into-lisp.impure.lisp
Oops, something went wrong.