Changeset 11862


Ignore:
Timestamp:
Mar 30, 2009, 5:11:36 PM (11 years ago)
Author:
rme
Message:

Add heretofore unimplemented vinsn get-double?.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/X8632/x8632-vinsns.lisp

    r11861 r11862  
    14371437;;; IWBNI we could simply call the "trap-unless-typecode=" vinsn here,
    14381438;;; instead of replicating it ..
    1439 ;;; get-double?
    1440 
     1439(define-x8632-vinsn get-double? (((target :double-float))
     1440                                 ((source :lisp))
     1441                                 ((tag :u8)))
     1442  :resume
     1443  (movl (:%l source) (:%l tag))
     1444  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
     1445   (andl (:$b x8632::tagmask) (:%accl tag))
     1446   (cmpl (:$b x8632::tag-misc) (:%accl tag)))
     1447  ((:pred > (:apply %hard-regspec-value tag) x8632::eax)
     1448   (andl (:$b x8632::tagmask) (:%l tag))
     1449   (cmpl (:$b x8632::tag-misc) (:%l tag)))
     1450  (jne :have-tag)
     1451  (movsbl (:@ x8632::misc-subtag-offset (:%l source)) (:%l tag))
     1452  :have-tag
     1453  (cmpl (:$b x8632::subtag-double-float) (:%l tag))
     1454  (jne :bad)
     1455  (movsd (:@  x8632::double-float.value (:%l source)) (:%xmm target))
     1456
     1457  (:anchored-uuo-section :resume)
     1458  :bad
     1459  (:anchored-uuo (uuo-error-reg-not-tag (:%q source) (:$ub x8632::subtag-double-float))))
    14411460
    14421461(define-x8632-vinsn copy-double-float (((dest :double-float))
Note: See TracChangeset for help on using the changeset viewer.