Changeset 10119


Ignore:
Timestamp:
Jul 19, 2008, 2:45:42 AM (11 years ago)
Author:
rme
Message:

Additions for x8632, primarily support for writing x8632 concatenated
functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lib/nfcomp.lisp

    r9892 r10119  
    3939#+ppc64-target
    4040(require "PPC64-ARCH")
     41#+x8632-target
     42(require "X8632-ARCH")
    4143#+x8664-target
    4244(require "X8664-ARCH")
     
    10011003          #.ppc64::fulltag-imm-2
    10021004          #.ppc64::fulltag-imm-3))
     1005        #+x8632-target
     1006        (#.x8632::tag-imm)
    10031007        #+x8664-target
    10041008        ((#.x8664::fulltag-imm-0
     
    10101014           #+ppc64-target
    10111015           (= (the fixnum (logand type-code ppc64::lowtagmask)) ppc64::lowtag-immheader)
     1016           #+x8632-target
     1017           (= (the fixnum (logand type-code x8632::fulltagmask)) x8632::fulltag-immheader)
    10121018           #+x8664-target
    10131019           (and (= (the fixnum (lisptag exp)) x8664::tag-misc)
     
    10221028             ((#.target::subtag-pool #.target::subtag-weak #.target::subtag-lock) (fasl-unknown exp))
    10231029             (#+ppc-target #.target::subtag-symbol
    1024                            #+x86-target #.target::tag-symbol (fasl-scan-symbol exp))
     1030              #+x8632-target #.target::subtag-symbol
     1031              #+x8664-target #.target::tag-symbol (fasl-scan-symbol exp))
    10251032             ((#.target::subtag-instance #.target::subtag-struct)
    10261033              (fasl-scan-user-form exp))
     
    10331040                  (fasl-scan-user-form exp))
    10341041                (fasl-scan-gvector exp)))
    1035              #+x86-target
     1042             #+x8632-target
     1043             (#.target::subtag-function (fasl-scan-clfun exp))
     1044             #+x8664-target
    10361045             (#.target::tag-function (fasl-scan-clfun exp))
    10371046             (t (fasl-scan-gvector exp)))))))))
     
    10621071#+x86-target
    10631072(defun fasl-scan-clfun (f)
    1064   (let* ((fv (%function-to-function-vector f))
     1073  (let* ((fv (function-to-function-vector f))
    10651074         (size (uvsize fv))
    10661075         (ncode-words (%function-code-words f)))
     
    14291438    (fasl-xdump-clfun f)
    14301439    (let* ((code-size (%function-code-words f))
    1431            (function-vector (%function-to-function-vector f))
     1440           (function-vector (function-to-function-vector f))
    14321441           (function-size (uvsize function-vector)))
    14331442      (fasl-out-opcode $fasl-clfun f)
    14341443      (fasl-out-count function-size)
    14351444      (fasl-out-count code-size)
    1436       (fasl-out-ivect function-vector 0 (ash code-size 3))
     1445      (fasl-out-ivect function-vector 0 (ash code-size target::word-shift))
    14371446      (do* ((k code-size (1+ k)))
    14381447           ((= k function-size))
     
    14431452 
    14441453
    1445 ;;; Write a "concatenated function"; for now, assume that the target
    1446 ;;; is x8664.
     1454;;; Write a "concatenated function".
    14471455(defun fasl-xdump-clfun (f)
    1448   (let* ((code (uvref f 0))
    1449          (code-size (dpb (uvref code 3)
    1450                          (byte 8 24)
    1451                          (dpb (uvref code 2)
    1452                               (byte 8 16)
    1453                               (dpb (uvref code 1)
    1454                                    (byte 8 8)
    1455                                    (uvref code 0)))))
    1456          (function-size (ash (uvsize code) -3)))
    1457     (assert (= (- function-size code-size) (1- (uvsize f))))
    1458     (fasl-out-opcode $fasl-clfun f)
    1459     (fasl-out-count function-size)
    1460     (fasl-out-count code-size)
    1461     (fasl-out-ivect code 0 (ash code-size 3))
    1462     (do* ((i 1 (1+ i))
    1463           (n (uvsize f)))
    1464          ((= i n))
    1465       (declare (fixnum i n))
    1466       (fasl-dump-form (%svref f i)))))
    1467    
    1468                          
    1469 
    1470 
     1456  (target-arch-case
     1457   (:x8632
     1458    (let* ((code (uvref f 0))
     1459           (function-size (ash (uvsize code) -2))
     1460           (imm-words (dpb (uvref code 1) (byte 8 8) (uvref code 0)))
     1461           (imm-bytes (ash imm-words 2))
     1462           (other-words (- function-size imm-words)))
     1463      (assert (= other-words (1- (uvsize f))))
     1464      (fasl-out-opcode $fasl-clfun f)
     1465      (fasl-out-count function-size)
     1466      (fasl-out-count imm-words)
     1467      (fasl-out-ivect code 0 imm-bytes)
     1468      (do ((i 1 (1+ i))
     1469           (n (uvsize f)))
     1470          ((= i n))
     1471        (declare (fixnum i n))
     1472        (fasl-dump-form (%svref f i)))))
     1473   (:x8664
     1474    (let* ((code (uvref f 0))
     1475           (code-size (dpb (uvref code 3)
     1476                           (byte 8 24)
     1477                           (dpb (uvref code 2)
     1478                                (byte 8 16)
     1479                                (dpb (uvref code 1)
     1480                                     (byte 8 8)
     1481                                     (uvref code 0)))))
     1482           (function-size (ash (uvsize code) -3)))
     1483      (assert (= (- function-size code-size) (1- (uvsize f))))
     1484      (fasl-out-opcode $fasl-clfun f)
     1485      (fasl-out-count function-size)
     1486      (fasl-out-count code-size)
     1487      (fasl-out-ivect code 0 (ash code-size 3))
     1488      (do* ((i 1 (1+ i))
     1489            (n (uvsize f)))
     1490           ((= i n))
     1491        (declare (fixnum i n))
     1492        (fasl-dump-form (%svref f i)))))))
    14711493
    14721494(defun fasl-dump-codevector (c)
Note: See TracChangeset for help on using the changeset viewer.