Changeset 6354 for branches/x8664-call


Ignore:
Timestamp:
Apr 26, 2007, 7:42:41 AM (13 years ago)
Author:
gb
Message:

Handle other label operands in (e.g.) CALL instructions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/x8664-call/ccl/compiler/X86/x86-lap.lisp

    r6322 r6354  
    943943             (when sib
    944944               (frag-list-push-byte frag-list sib)))))
    945        (let* ((disp (x86::x86-instruction-disp insn)))
    946          (when disp
    947            (let* ((optype (x86::x86-instruction-extra insn))
    948                   (pcrel (and (logtest (x86::encode-operand-type :label) optype)
     945       (let* ((operands (x86::x86-opcode-template-operand-types template)))
     946         (if (and (= (length operands) 1)
     947                  (= (x86::encode-operand-type :label) (aref operands 0)))
     948           (let* ((label (x86::x86-instruction-extra insn))
     949                  (frag (frag-list-current frag-list))
     950                  (pos (frag-list-position frag-list)))
     951             (push (make-reloc :type :branch32
     952                               :arg label
     953                               :frag frag
     954                               :pos pos)
     955                   (frag-relocs frag))
     956             (frag-list-push-32 frag-list 0))
     957           (let* ((disp (x86::x86-instruction-disp insn)))
     958             (when disp
     959               (let* ((optype (x86::x86-instruction-extra insn))
     960                      (pcrel (and (logtest (x86::encode-operand-type :label) optype)
    949961                              (typep disp 'label-x86-lap-expression)))
    950962                  (val (unless pcrel (early-x86-lap-expression-value disp))))
     
    964976                 (if (logtest optype (x86::encode-operand-type :disp32 :disp32s))
    965977                   (frag-list-push-32 frag-list val)
    966                    (frag-list-push-64 frag-list val)))))))
     978                   (frag-list-push-64 frag-list val)))))))))
    967979       ;; Emit immediate operand(s).
    968980       (let* ((op (x86::x86-instruction-imm insn)))
Note: See TracChangeset for help on using the changeset viewer.