Disassembly of movd instruction broken
Describe the bug
Disassembly of the movd
instruction is broken
To Reproduce
Steps to reproduce the behavior:
- Build the code from !202 (merged)
- Look at the lisp.map file to find the address of
xoroshiro-update
routine. (disassem:disassemble-memory (sys:int-sap <addr>) 50)
- See the error
Expected behavior
This should work. Contrast this to (disassemble 'kernel::xoroshiro-gen)
using the code from before !202 (merged). This has a
VOP with exactly the same instructions as the assembly routine. The
VOP is disassembled correctly.
Desktop (please complete the following information):
- OS: x86
- Version: !202 (merged)
Additional context
Here's what happens:
* (disassem:disassemble-memory (sys:int-sap #x100005B8) 50)
100005b8: movsd xmm0, [eax+1]
bd: movapd xmm2, xmm0
c1: psllq xmm2, 2
c6: paddq xmm2, xmm0
ca: movapd xmm3, xmm2
ce: psllq xmm3, 7
d3: psrlq xmm2, 39
d8: orpd xmm2, xmm3
dc: movapd xmm3, xmm2
e0: psllq xmm3, 3
e5: paddq xmm2, xmm3
nil fell through ecase expression. Wanted one of (:dword :word :byte).
[Condition of type conditions::case-failure]
Restarts:
0: [abort] Return to Top-Level.
Debug (type H for help)
(x86::print-reg-with-width 3 nil #<Synonym Stream to system:*stdout*> #<unused-arg>)
Source:
; File: target:compiler/x86/insts.lisp
(ecase width (:byte byte-reg-names) (:word word-reg-names) (:dword dword-reg-names))
0] 0
e9: movd
The instruction being disassembled is (inst movd r0 t0)
. I think
this is correct. It's the same instruction used in the VOP (although
the VOP may use sligtly different registers.)