Changeset 14193


Ignore:
Timestamp:
Aug 16, 2010, 5:56:50 PM (9 years ago)
Author:
rme
Message:

Add :call, :subprim-call, and :jumplr attributes to some vinsns.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/X8664/x8664-vinsns.lisp

    r13561 r14193  
    11731173  (jmp (:@ spno)))
    11741174
    1175 ;;; "call" a subprimitive that manipulates the stack in some way,
    1176 ;;; using an lea/jmp calling convention.
    1177 (define-x8664-vinsn (lea-jmp-subprim :call)  (()
    1178                                               ((spno :s32const))
    1179                                               ((entry (:label 1))))
    1180   (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    1181   (:talign 4)
    1182   (jmp (:@ spno))
    1183   :back
    1184   (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    1185 
    11861175;;; Call a subprimitive using a tail-aligned CALL instruction.
    1187 (define-x8664-vinsn (call-subprim :call) (()
    1188                                            ((spno :s32const))
    1189                                            ((entry (:label 1))))
     1176(define-x8664-vinsn (call-subprim :call :subprim-call) (()
     1177                                                        ((spno :s32const))
     1178                                                        ((entry (:label 1))))
    11901179  (:talign 4)
    11911180  (call (:@ spno))
     
    13611350
    13621351
    1363 (define-x8664-vinsn (fix-fixnum-overflow-ool :call)
     1352(define-x8664-vinsn (fix-fixnum-overflow-ool :call :subprim-call)
    13641353    (((val :lisp))
    13651354     ((val :lisp))
     
    13851374  (jmp :done))
    13861375
    1387 (define-x8664-vinsn (fix-fixnum-overflow-ool-and-branch :call)
     1376(define-x8664-vinsn (fix-fixnum-overflow-ool-and-branch :call :subprim-call)
    13881377    (((val :lisp))
    13891378     ((val :lisp)
     
    14671456                 (:apply %hard-regspec-value dest)))
    14681457    (leaq (:@ (:%q x) (:%q y)) (:%q dest)))))
    1469    
     1458
    14701459(define-x8664-vinsn copy-gpr (((dest t))
    14711460                              ((src t)))
     
    17821771
    17831772;;; %ra0 is pointing into %fn, so no need to copy %fn here.
    1784 (define-x8664-vinsn pass-multiple-values-symbol (()
    1785                                                 ())
     1773(define-x8664-vinsn (pass-multiple-values-symbol :jumplr) (()
     1774                                                        ())
    17861775  (pushq (:@ (:apply + (:apply target-nil-value) (x8664::%kernel-global 'x86::ret1valaddr))))
    17871776  (jmp (:@ x8664::symbol.fcell (:% x8664::fname))))
     
    17891778;;; It'd be good to have a variant that deals with a known function
    17901779;;; as well as this.
    1791 (define-x8664-vinsn pass-multiple-values (()
    1792                                           ()
    1793                                           ((tag :u8)))
     1780(define-x8664-vinsn (pass-multiple-values :jumplr) (()
     1781                                                  ()
     1782                                                  ((tag :u8)))
    17941783  :resume
    17951784  (movl (:%l x8664::temp0) (:%l tag))
     
    18221811
    18231812(define-x8664-vinsn (jump-known-function :jumplr) (()
    1824                                                    ())
     1813                                                   ()
     1814                                                   ((xfn (:lisp #.x8664::xfn))))
    18251815  (movq (:%q x8664::fn) (:%q x8664::xfn))
    18261816  (movq (:%q x8664::temp0)  (:%q x8664::fn))
     
    20512041;;; Call something callable and obtain the single value that it
    20522042;;; returns.
    2053 (define-x8664-vinsn funcall (()
    2054                              ()
    2055                              ((tag :u8)
    2056                               (entry (:label 1))))
     2043(define-x8664-vinsn (funcall :call) (()
     2044                                     ()
     2045                                     ((tag :u8)
     2046                                      (entry (:label 1))))
    20572047  :resume
    20582048  (movl (:%l x8664::temp0) (:%l tag))
     
    20692059  (:anchored-uuo (uuo-error-not-callable)))
    20702060
    2071 (define-x8664-vinsn tail-funcall (()
    2072                                   ()
    2073                                   ((tag (:u8 #.x8664::imm0))))
     2061(define-x8664-vinsn (tail-funcall :jumplr) (()
     2062                                            ()
     2063                                            ((tag (:u8 #.x8664::imm0))))
    20742064  :resume
    20752065  (movl (:%l x8664::temp0) (:%l tag))
Note: See TracChangeset for help on using the changeset viewer.