Changeset 9693


Ignore:
Timestamp:
Jun 7, 2008, 6:36:13 PM (11 years ago)
Author:
rme
Message:

In fixnum->char, be careful to use addb only when we know that dest is
usable as a byte register.

If we don't do this, then the instruction still assembles without warning,
but the assembler ends up treating dest as one of the high byte registers.
Therefore the subtag ends up where it shouldn't be, and dest never gets
tagged with subtag-character.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp

    r9692 r9693  
    34403440   (movl (:%l src) (:%l dest)))
    34413441  (shll (:$ub (- x8632::charcode-shift x8632::fixnumshift)) (:%l dest))
    3442   (addb (:$b x8632::subtag-character) (:%b dest))
     3442  ((:and (:pred >= (:apply %hard-regspec-value dest) x8632::eax)
     3443         (:pred <= (:apply %hard-regspec-value dest) x8632::ebx))
     3444   (addb (:$b x8632::subtag-character) (:%b dest)))
     3445  ((:pred > (:apply %hard-regspec-value dest) x8632::ebx)
     3446   (addl (:$l x8632::subtag-character) (:%l dest)))
    34433447  :done)
    34443448
Note: See TracChangeset for help on using the changeset viewer.