Changeset 8231


Ignore:
Timestamp:
Jan 21, 2008, 6:02:17 PM (12 years ago)
Author:
rme
Message:

Preserve nargs in funcall/tail-funcall. Only compare to low byte of subtag
in trap-unless-typecode=.

File:
1 edited

Legend:

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

    r8211 r8231  
    502502  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
    503503   ;; accumulator
    504    (andb (:$b x8632::tagmask) (:%accb tag))
    505    (cmpb (:$b x8632::tag-misc) (:%accb tag)))
    506   ((:and (:pred > (:apply %hard-regspec-value tag) x8632::eax)
    507          (:pred <= (:apply %hard-regspec-value tag) x8632::ebx))
    508    ;; other register that can be treated as a byte
    509    (andb (:$b x8632::tagmask) (:%b tag))
    510    (cmpb (:$b x8632::tag-misc) (:%b tag)))
    511   ((:pred > (:apply %hard-regspec-value tag) x8632::ebx)
    512    ;; non-byte register
    513    (andl (:$l x8632::tagmask) (:%l tag))
     504   (andl (:$b x8632::tagmask) (:%accl tag))
     505   (cmpl (:$b x8632::tag-misc) (:%accl tag)))
     506  ((:pred > (:apply %hard-regspec-value tag) x8632::eax)
     507   (andl (:$b x8632::tagmask) (:%l tag))
    514508   (cmpl (:$b x8632::tag-misc) (:%l tag)))
    515509  (jne :have-tag)
    516   (movl (:@ x8632::misc-subtag-offset (:%l object)) (:%l tag))
     510  (movb (:@ x8632::misc-subtag-offset (:%l object)) (:%b tag))
    517511  :have-tag
    518   (cmpl (:$b tagval) (:%l tag))
     512  (cmpb (:$b tagval) (:%b tag))
    519513  (je.pt :ok)
    520514  (uuo-error-reg-not-tag (:%l object) (:$ub tagval))
     
    29502944                             ((tag :u8)
    29512945                              (entry (:label 1))))
     2946  ;; tag is almost certainly going to be eax, which is
     2947  ;; the same as nargs.  we need to preserve nargs.
     2948  (pushl (:%l x8632::nargs.l))
    29522949  (movl (:%l x8632::temp0) (:%l tag))
    29532950  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
    29542951   ;; accumulator
    2955    (andb (:$b x8632::tagmask) (:%accb tag))
    2956    (cmpb (:$b x8632::tag-misc) (:%accb tag)))
    2957   ((:and (:pred > (:apply %hard-regspec-value tag) x8632::eax)
    2958          (:pred <= (:apply %hard-regspec-value tag) x8632::ebx))
    2959    ;; other register that can be treated as a byte
    2960    (andb (:$b x8632::tagmask) (:%b tag))
    2961    (cmpb (:$b x8632::tag-misc) (:%b tag)))
    2962   ((:pred > (:apply %hard-regspec-value tag) x8632::ebx)
    2963    ;; non-byte register
    2964    (andl (:$l x8632::tagmask) (:%l tag))
     2952   (andl (:$b x8632::tagmask) (:%accl tag))
     2953   (cmpl (:$b x8632::tag-misc) (:%accl tag)))
     2954  ((:pred > (:apply %hard-regspec-value tag) x8632::eax)
     2955   (andl (:$b x8632::tagmask) (:%l tag))
    29652956   (cmpl (:$b x8632::tag-misc) (:%l tag)))
    29662957  (jne :bad)
    2967   (movl (:@ x8632::misc-subtag-offset (:%l x8632::temp0)) (:%l tag))
    2968   (cmpl (:$b x8632::subtag-function) (:%l tag))
     2958  (movb (:@ x8632::misc-subtag-offset (:%l x8632::temp0)) (:%b tag))
     2959  (cmpb (:$b x8632::subtag-function) (:%b tag))
    29692960  (cmovel (:%l x8632::temp0) (:%l x8632::xfn))
    29702961  (je :call)
    2971   (cmpl (:$b x8632::subtag-symbol) (:%l tag))
     2962  (cmpb (:$b x8632::subtag-symbol) (:%b tag))
    29722963  (cmovel (:%l x8632::symbol.fcell (:%l x8632::fname)) (:%l x8632::xfn))
    29732964  (jne :bad)
    29742965  :call
     2966  (popl (:%l x8632::nargs))
    29752967  (:talign 5)
    29762968  (call (:%l x8632::xfn))
     
    29822974                                  ()
    29832975                                  ((tag :u8)))
     2976  (pushl (:%l x8632::nargs.l))
    29842977  (movl (:%l x8632::temp0) (:%l tag))
    29852978  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
    2986    ;; accumulator
    2987    (andb (:$b x8632::tagmask) (:%accb tag))
    2988    (cmpb (:$b x8632::tag-misc) (:%accb tag)))
    2989   ((:and (:pred > (:apply %hard-regspec-value tag) x8632::eax)
    2990          (:pred <= (:apply %hard-regspec-value tag) x8632::ebx))
    2991    ;; other register that can be treated as a byte
    2992    (andb (:$b x8632::tagmask) (:%b tag))
    2993    (cmpb (:$b x8632::tag-misc) (:%b tag)))
    2994   ((:pred > (:apply %hard-regspec-value tag) x8632::ebx)
    2995    ;; non-byte register
    2996    (andl (:$l x8632::tagmask) (:%l tag))
     2979   (andl (:$b x8632::tagmask) (:%accl tag))
     2980   (cmpl (:$b x8632::tag-misc) (:%accl tag)))
     2981  ((:pred > (:apply %hard-regspec-value tag) x8632::eax)
     2982   (andl (:$b x8632::tagmask) (:%l tag))
    29972983   (cmpl (:$b x8632::tag-misc) (:%l tag)))
    29982984  (jne :bad)
    2999   (movl (:@ x8632::misc-subtag-offset (:%l x8632::temp0)) (:%l tag))
    3000   (cmpl (:$b x8632::subtag-function) (:%l tag))
     2985  (movb (:@ x8632::misc-subtag-offset (:%l x8632::temp0)) (:%b tag))
     2986  (cmpb (:$b x8632::subtag-function) (:%b tag))
    30012987  (cmovel (:%l x8632::temp0) (:%l x8632::xfn))
    30022988  (je :go)
    3003   (cmpl (:$b x8632::subtag-symbol) (:%l tag))
     2989  (cmpb (:$b x8632::subtag-symbol) (:%b tag))
    30042990  (cmovel (:%l x8632::symbol.fcell (:%l x8632::fname)) (:%l x8632::xfn))
    30052991  (jne :bad)
    30062992  :go
     2993  (popl (:%l x8632::nargs.l))
    30072994  (jmp (:%l x8632::xfn))
    30082995  :bad
Note: See TracChangeset for help on using the changeset viewer.