Changeset 11256


Ignore:
Timestamp:
Oct 30, 2008, 1:42:24 PM (11 years ago)
Author:
gb
Message:

When decoding a UUO that has a register number in the low nibble,
only look at the low 3 bits if in 32-bit mode.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/x86-disassemble.lisp

    r11088 r11256  
    22302230(defun x86-dis-do-uuo (ds instruction intop)
    22312231  (declare (type (unsigned-byte 8) intop))
    2232   (let* ((stop t))
     2232  (let* ((stop t)
     2233         (regmask (if (x86-ds-mode-64 ds) #xf #x7)))
    22332234    (cond ((and (>= intop #x70) (< intop #x80))
    22342235           (let* ((pseudo-modrm-byte (x86-ds-next-u8 ds)))
     
    22362237                   "uuo-error-slot-unbound"
    22372238                   (x86-di-op0 instruction)
    2238                    (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%))                     
     2239                   (x86-dis-make-reg-operand (lookup-x86-register (logand intop regmask) :%))                     
    22392240                   (x86-di-op1 instruction)
    22402241                   (x86-dis-make-reg-operand (lookup-x86-register (ldb (byte 4 4)
     
    22512252                 "uuo-error-unbound"
    22522253                 (x86-di-op0 instruction)
    2253                  (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%))))
     2254                 (x86-dis-make-reg-operand (lookup-x86-register (logand intop rregmask) :%))))
    22542255          ((< intop #xb0)
    22552256           (setf (x86-di-mnemonic instruction)
    22562257                 "uuo-error-udf"
    22572258                 (x86-di-op0 instruction)
    2258                  (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%))))
     2259                 (x86-dis-make-reg-operand (lookup-x86-register (logand intop regmask) :%))))
    22592260         
    22602261          ((< intop #xc0)
     
    22622263                 "uuo-error-reg-not-type"
    22632264                 (x86-di-op0 instruction)
    2264                  (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%))
     2265                 (x86-dis-make-reg-operand (lookup-x86-register (logand intop #regmask) :%))
    22652266                 (x86-di-op1 instruction)
    22662267                 (x86::make-x86-immediate-operand :value (parse-x86-lap-expression (x86-ds-next-u8 ds)))))
     
    23322333                 "uuo-error-reg-not-tag"
    23332334                 (x86-di-op0 instruction)
    2334                  (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%))
     2335                 (x86-dis-make-reg-operand (lookup-x86-register (logand intop regmask) :%))
    23352336                 (x86-di-op1 instruction)
    23362337                 (x86::make-x86-immediate-operand :value (parse-x86-lap-expression (x86-ds-next-u8 ds)))))
     
    23392340                 "uuo-error-reg-not-list"
    23402341                 (x86-di-op0 instruction)
    2341                  (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%))))
     2342                 (x86-dis-make-reg-operand (lookup-x86-register (logand intop regmask) :%))))
    23422343          (t
    23432344           (setf (x86-di-mnemonic instruction)
    23442345                 "uuo-error-reg-not-fixnum"
    23452346                 (x86-di-op0 instruction)
    2346                  (x86-dis-make-reg-operand (lookup-x86-register (logand intop #xf) :%)))))
     2347                 (x86-dis-make-reg-operand (lookup-x86-register (logand intop regmask) :%)))))
    23472348    stop))
    23482349
Note: See TracChangeset for help on using the changeset viewer.