diff options
Diffstat (limited to 'module/system')
-rw-r--r-- | module/system/vm/assembler.scm | 10 | ||||
-rw-r--r-- | module/system/vm/disassembler.scm | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm index 6e00418af..ae527ddda 100644 --- a/module/system/vm/assembler.scm +++ b/module/system/vm/assembler.scm @@ -81,6 +81,7 @@ emit-immediate-tag=? emit-heap-tag=? emit-eq? + emit-eq-immediate? emit-heap-numbers-equal? emit-j emit-jl @@ -910,6 +911,14 @@ later by the linker." (emit-push asm dst) (encode-X8_S8_I16 asm 0 imm opcode) (emit-pop asm dst)))) +(define (encode-X8_S8_ZI16!/shuffle asm a imm opcode) + (cond + ((< a (ash 1 8)) + (encode-X8_S8_ZI16 asm a imm opcode)) + (else + (emit-push asm a) + (encode-X8_S8_ZI16 asm 0 imm opcode) + (emit-drop asm 1)))) (define (encode-X8_S8_ZI16<-/shuffle asm dst imm opcode) (cond ((< dst (ash 1 8)) @@ -1043,6 +1052,7 @@ later by the linker." (('<- 'X8_S12_C12) #'encode-X8_S12_C12<-/shuffle) (('! 'X8_S12_Z12) #'encode-X8_S12_Z12!/shuffle) (('<- 'X8_S8_I16) #'encode-X8_S8_I16<-/shuffle) + (('! 'X8_S8_ZI16) #'encode-X8_S8_ZI16!/shuffle) (('<- 'X8_S8_ZI16) #'encode-X8_S8_ZI16<-/shuffle) (('! 'X8_S8_S8_S8) #'encode-X8_S8_S8_S8!/shuffle) (('<- 'X8_S8_S8_S8) #'encode-X8_S8_S8_S8<-/shuffle) diff --git a/module/system/vm/disassembler.scm b/module/system/vm/disassembler.scm index 1cb767093..28f4338d6 100644 --- a/module/system/vm/disassembler.scm +++ b/module/system/vm/disassembler.scm @@ -235,7 +235,7 @@ address of that offset." (('prompt tag escape-only? proc-slot handler) ;; The H is for handler. (list "H -> ~A" (vector-ref labels (- (+ offset handler) start)))) - (('make-immediate _ imm) + (((or 'make-immediate 'eq-immediate?) _ imm) (list "~S" (sign-extended-immediate imm 16))) (((or 'make-short-immediate 'make-long-immediate) _ imm) (list "~S" (unpack-scm imm))) |