Changeset 7286


Ignore:
Timestamp:
Sep 24, 2007, 6:35:37 PM (12 years ago)
Author:
rme
Message:

checkpoint

Location:
branches/ia32
Files:
1 added
9 edited

Legend:

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

    r7262 r7286  
    148148(defx86reg fp7 xmm7)
    149149
     150(defx86reg fpzero fp7)
     151
    150152;;; The 8 MMX registers overlap the x87 FPU.
    151153;;; (so when/if we use the x87 FPU, we need to be careful with this)
     
    157159
    158160(defx86reg ra0 temp1)
     161
     162;;; We rely one at least one of %ra0/%fn pointing to the current function
     163;;; (or to a TRA that references the function) at all times.  When we
     164;;; tail call something, we want %RA0 to point to our caller's TRA and
     165;;; %FN to point to the new function.  Unless we go out of line to
     166;;; do tail calls, we need some register not involved in the calling
     167;;; sequence to hold the current function, since it might get GCed otherwise.
     168;;; (The odds of this happening are low, but non-zero.)
     169;;; xxx
     170(defx86reg xfn temp1)
    159171
    160172;;; This follows the ppc32 scheme pretty closely.
     
    343355)  ;eval-when
    344356
     357;;; On IA-32, the tag which was used for nil on ppc32 is now used for
     358;;; tagged return addresses.  We therefore make nil a distinguished
     359;;; CONS.  This way, CAR and CDR can just check the tag, and
     360;;; CONSP/RPLACA/RPLACD can check the tag and complain if the argument
     361;;; is NIL.
     362(defconstant nil-value (+ #x3000 fulltag-cons))
     363(defconstant t-value (+ #x3008 fulltag-misc))
     364(defconstant t-offset (- t-value nil-value))
     365(defconstant nilsym-offset (+ t-offset symbol.size))
     366
     367(defconstant misc-bias fulltag-misc)
     368(defconstant cons-bias fulltag-cons)
     369
     370
    345371(defmacro define-storage-layout (name origin &rest cells)
    346372  `(progn
     
    430456  binding-index
    431457)
    432 
    433 ;;; On IA-32, the tag which was used for nil on ppc32 is now used for
    434 ;;; tagged return addresses.  We therefore make nil a distinguished
    435 ;;; CONS.  This way, CAR and CDR can just check the tag, and
    436 ;;; CONSP/RPLACA/RPLACD can check the tag and complain if the argument
    437 ;;; is NIL.
    438 (defconstant nil-value (+ #x3000 fulltag-cons))
    439 (defconstant t-value (+ #x3008 fulltag-misc))
    440 (defconstant t-offset (- t-value nil-value))
    441 (defconstant nilsym-offset (+ t-offset symbol.size))
    442 
    443 (defconstant misc-bias fulltag-misc)
    444 (defconstant cons-bias fulltag-cons)
    445 
    446458
    447459(define-fixedsized-object vectorH
  • branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp

    r7251 r7286  
    539539                                      ((temp :u32)))
    540540  (movl (:@ x8632::misc-header-offset (:%l v)) (:%l temp))
    541   (xorl (:%l temp) (:%l temp))
    542   (shrl (:$ub (- x8632::num-subtag-bits x8632::fixnumshift)) (:%l temp))
     541  ((:and (:pred >= (:apply %hard-regspec-value temp) x8632::eax)
     542         (:pred <= (:apply %hard-regspec-value temp) x8632::ebx))
     543   (xorb (:%b temp) (:%b temp))
     544   (shrl (:$ub (- x8632::num-subtag-bits x8632::fixnumshift)) (:%l temp)))
     545  ((:pred > (:apply %hard-regspec-value temp) x8632::ebx)
     546   (shrl (:$ub x8632::num-subtag-bits) (:%l temp))
     547   (shll (:$ub x8632::fixnumshift) (:%l temp)))
    543548  (rcmpl (:%l idx) (:%l temp))
    544549  (jb.pt :ok)
     
    585590                                 ((object :lisp)))
    586591  (movl (:%l object) (:%l tag))
    587   ((:pred = (:apply %hard-regspec-value tag) x8632::al)
     592  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
    588593   ;; tag is the accumulator (2 bytes)
    589594   (andb (:$b x8632::tagmask) (:%accb tag)))
    590   ((:and (:pred > (:apply %hard-regspec-value tag) x8632::al)
    591          (:pred <= (:apply %hard-regspec-value tag) x8632::bl))
     595  ((:and (:pred > (:apply %hard-regspec-value tag) x8632::eax)
     596         (:pred <= (:apply %hard-regspec-value tag) x8632::ebx))
    592597   ;; tag is in a register whose low 8 bits can be accessed by byte
    593598   ;; insns (3 bytes)
     
    674679   (rcmpl (:%l val) (:$b const))))
    675680
    676 ;;;life will be sad if val isn't accesible as a byte reg
    677681(define-x8632-vinsn compare-u8-constant (()
    678682                                         ((val :u8)
    679683                                          (const :u8const)))
    680   (rcmpb (:%b val) (:$b const))
     684  ((:pred = (:apply %hard-regspec-value val) x8632::eax)
     685   (rcmpb (:%accb val) (:$b const)))
     686  ((:and (:pred > (:apply %hard-regspec-value val) x8632::eax)
     687         (:pred <= (:apply %hard-regspec-value val) x8632::ebx))
     688   (rcmpb (:%b val) (:$b const)))
     689  ((:pred > (:apply %hard-regspec-value val) x8632::ebx)
     690   (rcmpl (:%l val) (:$l const)))
    681691  )
    682692
     
    927937;;; setup-bignum-alloc-for-u32-overflow
    928938
    929 ;;; the uuo-alloc code looks at these exact registers
    930 ;;; header and size are actually args, not temporaries,
     939(define-x8632-vinsn setup-uvector-allocation (()
     940                                              ((header :imm)))
     941  (movd (:%l header) (:%mmx x8632::mm0)))
     942
     943;;; The code that runs in response to the uuo-alloc
     944;;; expects a header in mm0, and a size in imm0.
     945;;; mm0 is an implicit arg (it contains the uvector header)
     946;;; size is actually an arg, not a temporary,
    931947;;; but it appears that there's isn't a way to enforce
    932948;;; register usage on vinsn args.
    933949(define-x8632-vinsn %allocate-uvector (((dest :lisp))
    934                                       ()
    935                                       ((header (:u32 #.x8632::eax))
    936                                        (size (:u32 #.x8632::edx))
    937                                        (freeptr (:lisp #.x8632::allocptr))))
     950                                       ()
     951                                       ((size (:u32 #.x8632::imm0))
     952                                        (freeptr (:lisp #.x8632::allocptr))))
    938953  (subl (:%l size) (:@ (:%seg :rcontext) x8632::tcr.save-allocptr))
    939954  (movl (:@ (:%seg :rcontext) x8632::tcr.save-allocptr) (:%l freeptr))
     
    942957  (uuo-alloc)
    943958  :no-trap
    944   (movl (:%l header) (:@ x8632::misc-header-offset (:%l freeptr)))
     959  (movd (:%mmx x8632::mm0) (:@ x8632::misc-header-offset (:%l freeptr)))
    945960  (andb (:$b (lognot x8632::fulltagmask)) (:@ (:%seg :rcontext) x8632::tcr.save-allocptr))
    946961  ((:not (:pred = freeptr
     
    950965(define-x8632-vinsn set-bigits-after-fixnum-overflow (()
    951966                                                      ((bignum :lisp)))
    952   (movq (:%mmx x8664::mm0) (:@ x8632::misc-data-offset (:%l bignum))))
     967  (movq (:%mmx x8632::mm0) (:@ x8632::misc-data-offset (:%l bignum))))
    953968 
    954969(define-x8632-vinsn box-fixnum (((dest :imm))
     
    13201335  (movl (:$self 0) (:%l x8632::fn)))
    13211336
    1322 ;; jump-known-function
    1323 ;; list
    1324 ;; make-tsp-cons
     1337(define-x8632-vinsn (jump-known-function :jumplr) (()
     1338                                                   ())
     1339  (movl (:%l x8632::fn) (:%l x8632::xfn))
     1340  (movl (:%l x8632::temp0)  (:%l x8632::fn))
     1341  (jmp (:%l x8632::fn)))
     1342
     1343(define-x8632-vinsn (list :call) (()
     1344                                  ()
     1345                                  ((entry (:label 1))))
     1346  (leal (:@ (:^ :back) (:%l x8632::fn)) (:%l x8632::ra0))
     1347  (:talign 5)
     1348  (call (:@ .SPconslist))
     1349  :back
     1350  (movl (:$self 0) (:%l x8632::fn)))
     1351
     1352(define-x8632-vinsn make-tsp-cons (((dest :lisp))
     1353                                   ((car :lisp) (cdr :lisp))
     1354                                   ((temp :imm)))
     1355  (subl (:$b (+ x8632::cons.size x8632::dnode-size)) (:@ (:%seg :rcontext) x8632::tcr.next-tsp))
     1356  (movl (:@ (:%seg :rcontext) x8632::tcr.next-tsp) (:%l temp))
     1357  (movq (:%xmm x8632::fpzero) (:@ (:%l temp)))
     1358  (movq (:%xmm x8632::fpzero) (:@ 8 (:%l temp)))
     1359  (movd (:@ (:%seg :rcontext) x8632::tcr.save-tsp) (:%mmx x8632::stack-temp))
     1360  (movd (:%mmx x8632::stack-temp) (:@ (:%l temp)))
     1361  (movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.save-tsp))
     1362  (leal (:@ (+ x8632::dnode-size x8632::fulltag-cons) (:%l temp)) (:%l temp))
     1363  (movl (:%l car) (:@ x8632::cons.car (:%l temp)))
     1364  (movl (:%l cdr) (:@ x8632::cons.cdr (:%l temp)))
     1365  (movl (:%l temp) (:%l dest)))
     1366
     1367
    13251368;; make-fixed-stack-gvector
    13261369
     
    13501393    (addl (:$l (:apply ash nwords x8632::word-shift)) (:%l x8632::esp)))))
    13511394
     1395(defmacro define-x8632-subprim-lea-jmp-vinsn ((name &rest other-attrs) spno)
     1396  `(define-x8632-vinsn (,name :call :subprim-call ,@other-attrs) (() () ((entry (:label 1))))
     1397    (leal (:@ (:^ :back) (:%l x8632::fn)) (:%l x8632::ra0))
     1398    (:talign 5)
     1399    (jmp (:@ ,spno))
     1400    :back
     1401    (movl (:$self 0) (:%l x8632::fn))))
     1402
    13521403(defmacro define-x8632-subprim-call-vinsn ((name &rest other-attrs) spno)
    13531404  `(define-x8632-vinsn (,name :call :subprim-call ,@other-attrs) (() () ((entry (:label 1))))
     
    13611412    (jmp (:@ ,spno))))
    13621413
    1363 
    1364 
    1365 
    1366 
     1414(define-x8632-vinsn (nthrowvalues :call :subprim-call) (()
     1415                                                        ((lab :label)))
     1416  (leal (:@ (:^ lab) (:%l x8632::fn)) (:%l x8632::ra0))
     1417  (jmp (:@ .SPnthrowvalues)))
     1418
     1419(define-x8632-vinsn (nthrow1value :call :subprim-call) (()
     1420                                                        ((lab :label)))
     1421  (leal (:@ (:^ lab) (:%l x8632::fn)) (:%l x8632::ra0))
     1422  (jmp (:@ .SPnthrow1value)))
     1423
     1424(define-x8632-subprim-lea-jmp-vinsn (bind-interrupt-level-0) .SPbind-interrupt-level-0)
     1425
     1426(define-x8632-vinsn bind-interrupt-level-0-inline (()
     1427                                                   ()
     1428                                                   ((temp :imm)))
     1429  (movl (:@ (:%seg :rcontext) x8632::tcr.tlb-pointer) (:%l temp))
     1430  (cmpl (:$b 0) (:@ x8632::interrupt-level-binding-index (:%l temp)))
     1431  (pushl (:@ x8632::interrupt-level-binding-index (:%l temp)))
     1432  (pushl (:$b x8632::interrupt-level-binding-index))
     1433  (pushl (:@ (:%seg :rcontext) x8632::tcr.db-link))
     1434  (movl (:$l 0) (:@ x8632::interrupt-level-binding-index (:%l temp)))
     1435  (movl (:%l x8632::esp) (:@ (:%seg :rcontext) x8632::tcr.db-link))
     1436  (jns.pt :done)
     1437  (btrl (:$ub 31) (:@ (:%seg :rcontext) x8632::tcr.interrupt-pending))
     1438  (jae.pt :done)
     1439  (ud2a)
     1440  (:byte 2)
     1441  :done)
     1442
     1443(define-x8632-subprim-jump-vinsn (tail-call-fn-gen) .SPtcallnfngen)
     1444
     1445(define-x8632-subprim-jump-vinsn (tail-call-fn-vsp) .SPtcallnfnvsp)
     1446
     1447(define-x8632-vinsn set-eq-bit (()
     1448                                ())
     1449  (testb (:%b x8632::arg_z) (:%b x8632::arg_z)))
     1450
     1451;;; %schar8
     1452;;; %schar32
     1453;;; %set-schar8
     1454;;; %set-schar32
     1455
     1456(define-x8632-vinsn misc-set-c-single-float (((val :single-float))
     1457                                             ((v :lisp)
     1458                                              (idx :u32const)))
     1459  (movsd (:%xmm val) (:@ (:apply + x8632::misc-data-offset (:apply ash idx 2)) (:%l v))))
     1460
     1461(define-x8632-vinsn array-data-vector-ref (((dest :lisp))
     1462                                           ((header :lisp)))
     1463  (movl (:@ x8632::arrayH.data-vector (:%l header)) (:%l dest)))
    13671464
    13681465
     
    14091506;;; check-2d-bound
    14101507;;; check-3d-bound
    1411 ;;; 2d-dim1
     1508
     1509(define-x8632-vinsn 2d-dim1 (((dest :u32))
     1510                             ((header :lisp)))
     1511  (movl (:@ (+ x8632::misc-data-offset (* 4 (1+ x8632::arrayH.dim0-cell)))
     1512            (:%l header)) (:%l dest))
     1513  (sarl (:$ub x8632::fixnumshift) (:%l dest)))
     1514
    14121515;;; 3d-dims
    14131516;;; 2d-unscaled-index
     
    14221525  (movl (:%l a) (:%l tag))
    14231526  (orl (:%l b) (:%l tag))
    1424   (testl (:$l x8632::fixnummask) (:%l tag))
     1527  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
     1528   (testb (:$b x8632::fixnummask) (:%accb tag)))
     1529  ((:and (:pred > (:apply %hard-regspec-value tag) x8632::eax)
     1530         (:pred <= (:apply %hard-regspec-value tag) x8632::ebx))
     1531   (testb (:$b x8632::fixnummask) (:%b tag)))
     1532  ((:pred > (:apply %hard-regspec-value tag) x8632::ebx)
     1533   (testl (:$l x8632::fixnummask) (:%l tag)))
    14251534  (jne dest))
    14261535
     
    14671576  (movl (:$self 0) (:%l x8632::fn)))
    14681577
     1578(define-x8632-vinsn zero-double-float-register (((dest :double-float))
     1579                                                ())
     1580  (movsd (:%xmm x8632::fpzero) (:%xmm dest)))
     1581
     1582(define-x8632-vinsn zero-single-float-register (((dest :single-float))
     1583                                                ())
     1584  (movss (:%xmm x8632::fpzero) (:%xmm dest)))
     1585
     1586(define-x8632-subprim-call-vinsn (stack-misc-alloc) .SPstack-misc-alloc)
     1587
     1588(define-x8632-vinsn misc-element-count-fixnum (((dest :imm))
     1589                                               ((src :lisp))
     1590                                               ((temp :u32)))
     1591  (movl (:@ x8632::misc-header-offset (:%l src)) (:%l temp))
     1592  ((:and (:pred >= (:apply %hard-regspec-value temp) x8632::eax)
     1593         (:pred <= (:apply %hard-regspec-value temp) x8632::ebx))
     1594   (movb (:$b 0) (:%b temp)))
     1595  ((:pred > (:apply %hard-regspec-value temp) x8632::ebx)
     1596   (andl (:$l #xffffff00) (:%l temp)))
     1597  (movl (:%l temp) (:%l dest))
     1598  (shrl (:$ub (- x8632::num-subtag-bits x8632::fixnumshift)) (:%l dest)))
     1599
     1600
     1601
     1602(define-x8632-vinsn %logior2 (((dest :imm))
     1603                              ((x :imm)
     1604                               (y :imm)))
     1605  ((:pred =
     1606          (:apply %hard-regspec-value x)
     1607          (:apply %hard-regspec-value dest))
     1608   (orl (:%l y) (:%l dest)))
     1609  ((:not (:pred =
     1610                (:apply %hard-regspec-value x)
     1611                (:apply %hard-regspec-value dest)))
     1612   ((:pred =
     1613           (:apply %hard-regspec-value y)
     1614           (:apply %hard-regspec-value dest))
     1615    (orl (:%l x) (:%l dest)))
     1616   ((:not (:pred =
     1617                 (:apply %hard-regspec-value y)
     1618                 (:apply %hard-regspec-value dest)))
     1619    (movl (:%l x) (:%l dest))
     1620    (orl (:%l y) (:%l dest)))))
     1621
     1622(define-x8632-vinsn %logand2 (((dest :imm))
     1623                              ((x :imm)
     1624                               (y :imm)))
     1625  ((:pred =
     1626          (:apply %hard-regspec-value x)
     1627          (:apply %hard-regspec-value dest))
     1628   (andl (:%l y) (:%l dest)))
     1629  ((:not (:pred =
     1630                (:apply %hard-regspec-value x)
     1631                (:apply %hard-regspec-value dest)))
     1632   ((:pred =
     1633           (:apply %hard-regspec-value y)
     1634           (:apply %hard-regspec-value dest))
     1635    (andl (:%l x) (:%l dest)))
     1636   ((:not (:pred =
     1637                 (:apply %hard-regspec-value y)
     1638                 (:apply %hard-regspec-value dest)))
     1639    (movl (:%l x) (:%l dest))
     1640    (andl (:%l y) (:%l dest)))))
     1641
     1642(define-x8632-vinsn %logxor2 (((dest :imm))
     1643                              ((x :imm)
     1644                               (y :imm)))
     1645  ((:pred =
     1646          (:apply %hard-regspec-value x)
     1647          (:apply %hard-regspec-value dest))
     1648   (xorl (:%l y) (:%l dest)))
     1649  ((:not (:pred =
     1650                (:apply %hard-regspec-value x)
     1651                (:apply %hard-regspec-value dest)))
     1652   ((:pred =
     1653           (:apply %hard-regspec-value y)
     1654           (:apply %hard-regspec-value dest))
     1655    (xorl (:%l x) (:%l dest)))
     1656   ((:not (:pred =
     1657                 (:apply %hard-regspec-value y)
     1658                 (:apply %hard-regspec-value dest)))
     1659    (movl (:%l x) (:%l dest))
     1660    (xorl (:%l y) (:%l dest)))))
     1661
     1662(define-x8632-subprim-call-vinsn (integer-sign) .SPinteger-sign)
     1663
     1664(define-x8632-subprim-call-vinsn (misc-ref) .SPmisc-ref)
     1665
     1666(define-x8632-subprim-call-vinsn (ksignalerr) .SPksignalerr)
     1667
     1668(define-x8632-subprim-call-vinsn (misc-alloc-init) .SPmisc-alloc-init)
     1669
     1670(define-x8632-subprim-call-vinsn (misc-alloc) .SPmisc-alloc)
     1671
     1672(define-x8632-vinsn setup-double-float-allocation (()
     1673                                                   ())
     1674  (movl (:$l (arch::make-vheader x8632::double-float.element-count x8632::subtag-double-float)) (:%l x8632::imm0))
     1675  (movl (:$l (- x8632::double-float.size x8632::fulltag-misc)) (:%l x8664::imm1.l)))
     1676
     1677(define-x8632-vinsn set-double-float-value (()
     1678                                            ((node :lisp)
     1679                                             (val :double-float)))
     1680  (movsd (:%xmm val) (:@ x8664::double-float.value (:%l node))))
     1681
     1682(define-x8632-vinsn %natural+  (((result :u32))
     1683                               ((result :u32)
     1684                                (other :u32)))
     1685  (addl (:%l other) (:%l result)))
     1686
     1687(define-x8632-vinsn %natural+-c (((result :u32))
     1688                                ((result :u32)
     1689                                 (constant :s32const)))
     1690  (addl (:$l constant) (:%l result)))
     1691
     1692(define-x8632-vinsn %natural-  (((result :u32))
     1693                               ((result :u32)
     1694                                (other :u32)))
     1695  (subl (:%l other) (:%l result)))
     1696
     1697(define-x8632-vinsn %natural--c (((result :u32))
     1698                                ((result :u32)
     1699                                 (constant :s32const)))
     1700  (subl (:$l constant) (:%l result)))
     1701
     1702(define-x8632-vinsn %natural-logior (((result :u32))
     1703                                    ((result :u32)
     1704                                     (other :u32)))
     1705  (orl (:%l other) (:%l result)))
     1706
     1707(define-x8632-vinsn %natural-logior-c (((result :u32))
     1708                                      ((result :u32)
     1709                                       (constant :s32const)))
     1710  (orl (:$l constant) (:%l result)))
     1711
     1712(define-x8632-vinsn %natural-logand (((result :u32))
     1713                                    ((result :u32)
     1714                                     (other :u32)))
     1715  (andl (:%l other) (:%l result)))
     1716
     1717(define-x8632-vinsn %natural-logand-c (((result :u32))
     1718                                      ((result :u32)
     1719                                       (constant :s32const)))
     1720  (andl (:$l constant) (:%l result)))
     1721
     1722(define-x8632-vinsn %natural-logxor (((result :u32))
     1723                                    ((result :u32)
     1724                                     (other :u32)))
     1725  (xorl (:%l other) (:%l result)))
     1726
     1727(define-x8632-vinsn %natural-logxor-c (((result :u32))
     1728                                       ((result :u32)
     1729                                        (constant :s32const)))
     1730  (xorl (:$l constant) (:%l result)))
     1731
     1732(define-x8632-vinsn natural-shift-left (((dest :u32))
     1733                                        ((dest :u32)
     1734                                         (amt :u8const)))
     1735  (shll (:$ub amt) (:%l dest)))
     1736
     1737(define-x8632-vinsn natural-shift-right (((dest :u32))
     1738                                         ((dest :u32)
     1739                                          (amt :u8const)))
     1740  (shrl (:$ub amt) (:%l dest)))
     1741
     1742
     1743
    14691744(queue-fixup
    14701745 (fixup-x86-vinsn-templates
     
    14721747  x86::*x86-opcode-template-lists*))
    14731748
    1474 (define-x8632-subprim-call-vinsn (integer-sign) .SPinteger-sign)
    1475 
    1476 (define-x8632-subprim-call-vinsn (misc-ref) .SPmisc-ref)
    1477 
    1478 (define-x8632-subprim-call-vinsn (ksignalerr) .SPksignalerr)
    1479 
    1480 (define-x8632-subprim-call-vinsn (misc-alloc-init) .SPmisc-alloc-init)
    1481 
    1482 (define-x8632-subprim-call-vinsn (misc-alloc) .SPmisc-alloc)
    1483 
  • branches/ia32/compiler/X86/x862.lisp

    r7245 r7286  
    1919(eval-when (:compile-toplevel :execute)
    2020  (require "NXENV")
     21  (require "X8632ENV")
    2122  (require "X8664ENV"))
    2223
     
    180181(defvar *x862-imm0* nil)
    181182(defvar *x862-temp0* nil)
     183(defvar *x862-temp1* nil)
    182184(defvar *x862-fname* nil)
     185
     186(defvar *x862-allocptr* nil)
    183187
    184188(declaim (fixnum *x862-vstack* *x862-cstack*))
     
    323327        (x862-do-lexical-reference seg arg ea)
    324328        (x862-set-nargs seg 1)
    325         (! ref-constant ($ x8664::fname) (x86-immediate-label (x862-symbol-entry-locative '%cons-magic-next-method-arg)))
     329        (! ref-constant ($ *x862-fname*) (x86-immediate-label (x862-symbol-entry-locative '%cons-magic-next-method-arg)))
    326330        (! call-known-symbol arg)
    327331        (x862-do-lexical-setq seg nil ea result)))))
     
    429433  (if (zerop count)
    430434    0
    431     (min (- (ash ea (- x8664::word-shift)) count) #xff)))
     435    (min (- (ash ea (- *x862-target-node-shift*)) count) #xff)))
    432436
    433437
     
    470474           (*x862-temp0* (target-arch-case (:x8632 x8632::temp0)
    471475                                           (:x8664 x8664::temp0)))
     476           (*x862-temp1* (target-arch-case (:x8632 x8632::temp1)
     477                                           (:x8664 x8664::temp1)))
    472478           (*x862-fname* (target-arch-case (:x8632 x8632::fname)
    473479                                           (:x8664 x8664::fname)))
     480           (*x862-allocptr* (target-arch-case (:x8632 x8632::allocptr)
     481                                              (:x8664 x8664::allocptr)))
    474482           
    475483
     
    857865      (do* ((things (%sort-list-no-key maybe #'%x862-bigger-cdr-than) (cdr things))
    858866            (n 0 (1+ n))
    859             (registers (target-arch-case (:x8664
    860                                           (list x8664::save0 x8664::save1 x8664::save2 x8664::save3))))
     867            (registers (target-arch-case
     868                        (:x8632 ())
     869                        (:x8664
     870                         (list x8664::save0 x8664::save1 x8664::save2 x8664::save3))))
    861871            (regno (pop registers) (pop registers))
    862872            (constant-alist ()))
     
    885895    (setq *x862-compiler-register-save-label* (x862-emit-note seg :regsave))
    886896    (with-x86-local-vinsn-macros (seg)
    887       (let* ((mask (target-arch-case (:x8664 x8664-nonvolatile-node-regs))))
     897      (let* ((mask (target-arch-case
     898                    (:x8632 x8632-nonvolatile-node-regs)
     899                    (:x8664 x8664-nonvolatile-node-regs))))
    888900        (dotimes (i n)
    889901          (let* ((reg (1- (integer-length mask))))
     
    904916  (when (and ea nregs)
    905917    (with-x86-local-vinsn-macros (seg)
    906       (let* ((mask (target-arch-case (:x8664 x8664-nonvolatile-node-regs)))
     918      (let* ((mask (target-arch-case
     919                    (:x8632 x8632-nonvolatile-node-regs)
     920                    (:x8664 x8664-nonvolatile-node-regs)))
    907921             (regs ()))
    908922        (dotimes (i nregs)
     
    36643678                ;; lots of redundancy here.
    36653679                (target-arch-case
     3680                 (:x8632
     3681                  (ecase dest-mode
     3682                    (#.hard-reg-class-gpr-mode-node ; boxed result.
     3683                     (case src-mode
     3684                       (#.hard-reg-class-gpr-mode-node
     3685                        (unless (eql  dest-gpr src-gpr)
     3686                          (! copy-gpr dest src)))
     3687                       (#.hard-reg-class-gpr-mode-u32
     3688                        (x862-box-u32 seg dest src))
     3689                       (#.hard-reg-class-gpr-mode-s32
     3690                        (x862-box-s32 seg dest src))
     3691                       (#.hard-reg-class-gpr-mode-u16
     3692                        (! box-fixnum dest src))
     3693                       (#.hard-reg-class-gpr-mode-s16
     3694                        (! box-fixnum dest src))
     3695                       (#.hard-reg-class-gpr-mode-u8
     3696                        (! box-fixnum dest src))
     3697                       (#.hard-reg-class-gpr-mode-s8
     3698                        (! box-fixnum dest src))
     3699                       (#.hard-reg-class-gpr-mode-address
     3700                        (x862-macptr->heap seg dest src))))
     3701                    ((#.hard-reg-class-gpr-mode-u32
     3702                      #.hard-reg-class-gpr-mode-address)
     3703                     (case src-mode
     3704                       (#.hard-reg-class-gpr-mode-node
     3705                        (let* ((src-type (get-node-regspec-type-modes src)))
     3706                          (declare (fixnum src-type))
     3707                          (case dest-mode
     3708                            (#.hard-reg-class-gpr-mode-u32
     3709                             (! unbox-u32 dest src))
     3710                            (#.hard-reg-class-gpr-mode-address
     3711                             (unless (or (logbitp #.hard-reg-class-gpr-mode-address src-type)
     3712                                         *x862-reckless*)
     3713                               (! trap-unless-macptr src))
     3714                             (! deref-macptr dest src)))))
     3715                       ((#.hard-reg-class-gpr-mode-u32
     3716                         #.hard-reg-class-gpr-mode-s32
     3717                         #.hard-reg-class-gpr-mode-address)
     3718                        (unless (eql  dest-gpr src-gpr)
     3719                          (! copy-gpr dest src)))
     3720                       (#.hard-reg-class-gpr-mode-u16
     3721                        (! u16->u32 dest src))                 
     3722                       (#.hard-reg-class-gpr-mode-s16
     3723                        (! s16->s32 dest src))
     3724                       (#.hard-reg-class-gpr-mode-u8
     3725                        (! u8->u32 dest src))
     3726                       (#.hard-reg-class-gpr-mode-s8
     3727                        (! s8->s32 dest src))))
     3728                    (#.hard-reg-class-gpr-mode-u16
     3729                     (case src-mode
     3730                       (#.hard-reg-class-gpr-mode-node
     3731                        (! unbox-u16 dest src))
     3732                       ((#.hard-reg-class-gpr-mode-u8
     3733                         #.hard-reg-class-gpr-mode-s8)
     3734                        (! u8->u32 dest src))
     3735                       (t
     3736                        (unless (eql dest-gpr src-gpr)
     3737                          (! copy-gpr dest src)))))
     3738                    (#.hard-reg-class-gpr-mode-s16
     3739                     (case src-mode
     3740                       (#.hard-reg-class-gpr-mode-node
     3741                        (! unbox-s16 dest src))
     3742                       (#.hard-reg-class-gpr-mode-s8
     3743                        (! s8->s32 dest src))
     3744                       (#.hard-reg-class-gpr-mode-u8
     3745                        (! u8->u32 dest src))
     3746                       (t
     3747                        (unless (eql dest-gpr src-gpr)
     3748                          (! copy-gpr dest src)))))
     3749                    (#.hard-reg-class-gpr-mode-u8
     3750                     (case src-mode
     3751                       (#.hard-reg-class-gpr-mode-node
     3752                        (if *x862-reckless*
     3753                          (! %unbox-u8 dest src)
     3754                          (! unbox-u8 dest src)))
     3755                       (t
     3756                        (unless (eql dest-gpr src-gpr)
     3757                          (! copy-gpr dest src)))))
     3758                    (#.hard-reg-class-gpr-mode-s8
     3759                     (case src-mode
     3760                       (#.hard-reg-class-gpr-mode-node
     3761                        (! unbox-s8 dest src))
     3762                       (t
     3763                        (unless (eql dest-gpr src-gpr)
     3764                          (! copy-gpr dest src)))))))
    36663765                 (:x8664
    36673766                  (ecase dest-mode
     
    38513950  (when subtag
    38523951    (target-arch-case
     3952     (:x8632
     3953      (let* ((masked (logand subtag x8632::fulltagmask)))
     3954        (declare (fixnum masked))
     3955        (= masked x8632::fulltag-immheader)))
    38533956     (:x8664
    38543957      (let* ((masked (logand subtag x8664::fulltagmask)))
     
    38613964  (when subtag
    38623965    (target-arch-case
     3966     (:x8632
     3967      (let* ((masked (logand subtag x8632::fulltagmask)))
     3968        (declare (fixnum masked))
     3969        (= masked x8632::fulltag-nodeheader)))
    38633970     (:x8664
    38643971      (let* ((masked (logand subtag x8664::fulltagmask)))
     
    45294636        (cond ((or *x862-open-code-inline* (> nntriv 3))
    45304637               (x862-formlist seg initforms nil)
    4531                (x862-lri seg *x862-imm0* header)
    4532                (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) (target-arch-case  (:x8664 x8664::fulltag-misc))))
     4638               (target-arch-case
     4639                (:x8632
     4640                 (x862-lri seg *x862-imm0* header)
     4641                 (! setup-uvector-allocation *x862-imm0*)
     4642                 (x862-lri seg *x862-imm0* (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) x8632::fulltag-misc)))
     4643                (:x8664
     4644                 (x862-lri seg *x862-imm0* header)
     4645                 (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) x8664::fulltag-misc))))
    45334646               (! %allocate-uvector vreg)
    45344647               (unless (eql n 0)
     
    45444657                       (push nil pending)
    45454658                       (x862-vpush-register seg (x862-one-untargeted-reg-form seg form *x862-arg-z*)))))
    4546                  (x862-lri seg *x862-imm0* header)
    4547                  (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) (target-arch-case  (:x8664 x8664::fulltag-misc))))
     4659                 (target-arch-case
     4660                  (:x8632
     4661                   (x862-lri seg *x862-imm0* header)
     4662                   (! setup-uvector-allocation *x862-imm0*)
     4663                   (x862-lri seg *x862-imm0* (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) x8632::fulltag-misc)))
     4664                  (:x8664
     4665                   (x862-lri seg *x862-imm0* header)
     4666                   (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) x8664::fulltag-misc))))
    45484667                 (ensuring-node-target (target vreg)
    45494668                   (! %allocate-uvector target)
     
    70937212      (x862-test-reg-%izerop seg vreg xfer *x862-imm0* cr-bit true-p
    70947213                             (target-arch-case
    7095                              
     7214                              (:x8632 x8632::subtag-character)
    70967215                              (:x8664 x8664::subtag-character))))))
    70977216
     
    71937312               (physsize x8664::imm1))
    71947313          (x862-lri seg header (arch::make-vheader nelements subtag))
    7195           (x862-lri seg physsize (- (* (ceiling (+ nbytes *x862-target-node-size*) *x862-target-dnode-size*) *x862-target-dnode-size*) (target-arch-case (:x8664 x8664::fulltag-misc))))
     7314          (x862-lri seg physsize (- (* (ceiling (+ nbytes *x862-target-node-size*) *x862-target-dnode-size*)
     7315                                       *x862-target-dnode-size*)
     7316                                    (target-arch-case
     7317                                     (:x8632 x8632::fulltag-misc)
     7318                                     (:x8664 x8664::fulltag-misc))))
    71967319          (ensuring-node-target (target vreg)
    71977320            (! %allocate-uvector target)))
     
    72147337      (x862-form seg vreg xfer form2))
    72157338    (let* ((count (acode-fixnum-form-p form1))
    7216            (max (target-arch-case (:x8664 63))))
     7339           (max (target-arch-case (:x8632 31) (:x8664 63))))
    72177340      (declare (fixnum max))
    72187341      (ensuring-node-target (target vreg)
     
    78087931  (^))
    78097932
    7810 
     7933;;; xxx --- does anyone use this?
    78117934(defx862 x862-%lisp-word-ref %lisp-word-ref (seg vreg xfer base offset)
    78127935  (let* ((fixoffset (acode-fixnum-form-p offset)))
     
    82018324    (ensuring-node-target (target vreg)
    82028325      (x862-lri seg target (target-arch-case
    8203                            
     8326                            (:x8632 x8632::unbound-marker)
    82048327                            (:x8664 x8664::unbound-marker)))))
    82058328  (^))
     
    82098332    (ensuring-node-target (target vreg)
    82108333      (x862-lri seg target (target-arch-case
     8334                            (:x8632 x8632::slot-unbound-marker)
    82118335                            (:x8664 x8664::slot-unbound-marker)))))
    82128336  (^))
     
    82168340    (ensuring-node-target (target vreg)
    82178341      (x862-lri seg target (target-arch-case
     8342                            (:x8632 x8632::illegal-marker)
    82188343                            (:x8664 x8664::illegal-marker)))))
    82198344  (^))
     
    89389063                         (x862-store-immediate seg sym symreg)))
    89399064        (! symbol-ref target symreg (target-arch-case
    8940                                         (:x8664 x8664::symbol.vcell-cell))))))
     9065                                     (:x8632 x8632::symbol.vcell-cell)
     9066                                     (:x8664 x8664::symbol.vcell-cell))))))
    89419067  (^))
    89429068
     
    89509076             (make-acode (%nx1-operator fixnum)
    89519077                         (target-arch-case
     9078                          (:x8632 x8632::symbol.vcell-cell)
    89529079                          (:x8664 x8664::symbol.vcell-cell)))
    89539080             val
     
    92059332      (signal-or-defer-warnings warnings nil)
    92069333      (when disassemble
    9207         (format t "~%~%")
    9208         (apply #'x8632-disassemble-xfunction
    9209                xlfun
    9210                (unless symbolic-names (list nil))))
     9334        (let ((*target-backend* backend))
     9335          (format t "~%~%")
     9336          (apply #'x8632-disassemble-xfunction
     9337                 xlfun
     9338                 (unless symbolic-names (list nil)))))
    92119339      xlfun)))
    92129340
  • branches/ia32/lisp-kernel/lisp.s

    r4315 r7286  
    1919         include(ppc-uuo.s)
    2020        ])
    21         ifdef([X86],[
     21        ifdef([X8664],[
    2222         include(x86-constants.s)
    2323         include(x86-macros.s)
    2424         include(x86-uuo.s)
    2525        ])
     26        ifdef([X8632],[
     27         include(x86-constants.s)
     28         include(x86-macros32.s)
     29         include(x86-uuo.s)
     30        ])
    2631
  • branches/ia32/lisp-kernel/thread_manager.c

    r7243 r7286  
    562562void setup_tcr_extra_segment(TCR *tcr)
    563563{
    564     unsigned int *addr = (unsigned int *)tcr;
     564    uintptr_t addr = (uintptr_t)tcr;
    565565    unsigned int size = sizeof(TCR);
    566566    ldt_entry_t desc;
     
    570570    desc.data.limit00 = (size - 1) & 0xffff;
    571571    desc.data.limit16 = ((size - 1) >> 16) & 0xf;
    572     desc.data.base00 = addr & 0xfff;
     572    desc.data.base00 = addr & 0xffff;
    573573    desc.data.base16 = (addr >> 16) & 0xff;
    574574    desc.data.base24 = (addr >> 24) & 0xff;
  • branches/ia32/lisp-kernel/x86-constants32.s

    r7268 r7286  
    88define([rcontext],[fs])
    99
     10define([fname],[temp0])
    1011define([allocptr],[temp0])
    1112
  • branches/ia32/lisp-kernel/x86-macros32.s

    r7267 r7286  
     1define([vrefr],[
     2        mov misc_data_offset+($3<<word_shift)($2),$1
     3])     
     4
     5define([jump_fn],[
     6        jmpl *%fn
     7])
     8                       
     9define([jump_fname],[
     10        mov symbol.fcell(%fname),%fn
     11        jump_fn()
     12])     
     13
     14define([set_nargs],[
     15        movw [$]$1<<fixnumshift,%nargs
     16])
     17
     18define([tra],[
     19        .p2align 3
     20        .long 0
     21        .byte 0
     22$1:     
     23])
     24
     25
    126/* $1 = ndigits.  Assumes 4-byte digits */
    227define([aligned_bignum_size],[((~(dnode_size-1)&(node_size+(dnode_size-1)+(4*$1))))])
     28
     29define([ref_nrs_value],[
     30        mov nrs.$1+symbol.vcell,$2
     31])
    332
    433define([unbox_fixnum],[
  • branches/ia32/lisp-kernel/x86-spentry32.s

    r7267 r7286  
    1313#  __line__
    1414])
     15
     16define([jump_builtin],[
     17        ref_nrs_value(builtin_functions,%fname)
     18        set_nargs($2)
     19        vrefr(%fname,%fname,$1)
     20        jump_fname()
     21])
     22
     23_spentry(bad_funcall)   
     24        .globl C(bad_funcall)   
     25__(tra(C(bad_funcall)))
     26        __(uuo_error_not_callable)
     27_endsubp(bad_funcall)
    1528
    1629/* %arg_z has overflowed by one bit.  Make a bignum with 1 (32-bit) digit. */
     
    4457        __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(1)))
    4558        __(movd %mm1,misc_data_offset(%arg_z))
    46 0:      __(ret)
     590:      __(repret)
    4760_endsubp(makes32)
    4861       
    49 /* Make a lisp integer out of the %edx:%eax pair. */
     62/* Make a lisp integer (probably a bignum) out of the %edx:%eax pair. */
    5063/* We assume that the node_regs_mask in the TCR has been set to mark */
    5164/* %edx an immediate register. */
     
    6376        __(ret)
    6477_endfn
     78
     79/* %arg_y = uvector, %arg_z = index */
     80/* subtag in %imm0.b */
     81_startfn(C(misc_ref_common))
     82        .p2align 2
     83local_label(misc_ref_jmp):           
     84        /* 00-0f  */
     85         .long local_label(misc_ref_invalid) /* 00 even_fixnum  */
     86         .long local_label(misc_ref_invalid) /* 01 cons  */
     87         .long local_label(misc_ref_invalid) /* 02 nodeheader  */
     88         .long local_label(misc_ref_invalid) /* 03 imm  */
     89         .long local_label(misc_ref_invalid) /* 04 odd_fixnum  */
     90         .long local_label(misc_ref_invalid) /* 05 tra  */
     91         .long local_label(misc_ref_invalid) /* 06 misc  */
     92         .long local_label(misc_ref_u32) /* 07 bignum  */
     93         .long local_label(misc_ref_invalid) /* 08 even_fixnum  */
     94         .long local_label(misc_ref_invalid) /* 09 cons  */
     95         .long local_label(misc_ref_node) /* 0a ratio  */
     96         .long local_label(misc_ref_invalid) /* 0b imm  */
     97         .long local_label(misc_ref_invalid) /* 0c odd_fixnum  */
     98         .long local_label(misc_ref_invalid) /* 0d nil  */
     99         .long local_label(misc_ref_invalid) /* 0e misc  */
     100         .long local_label(misc_ref_u32) /* 0f single_float  */
     101        /* 10-1f  */
     102         .long local_label(misc_ref_invalid) /* 10 even_fixnum  */
     103         .long local_label(misc_ref_invalid) /* 11 cons  */
     104         .long local_label(misc_ref_invalid) /* 12 nodeheader  */
     105         .long local_label(misc_ref_invalid) /* 13 imm  */
     106         .long local_label(misc_ref_invalid) /* 14 odd_fixnum  */
     107         .long local_label(misc_ref_invalid) /* 15 tra  */
     108         .long local_label(misc_ref_invalid) /* 16 misc  */
     109         .long local_label(misc_ref_u32) /* 17 double_float  */
     110         .long local_label(misc_ref_invalid) /* 18 even_fixnum  */
     111         .long local_label(misc_ref_invalid) /* 19 cons  */
     112         .long local_label(misc_ref_node) /* 1a complex  */
     113         .long local_label(misc_ref_invalid) /* 1b imm  */
     114         .long local_label(misc_ref_invalid) /* 1c odd_fixnum  */
     115         .long local_label(misc_ref_invalid) /* 1d nil  */
     116         .long local_label(misc_ref_invalid) /* 1e misc  */
     117         .long local_label(misc_ref_u32) /* 1f macptr  */
     118        /* 20-2f  */
     119         .long local_label(misc_ref_invalid) /* 20 even_fixnum  */
     120         .long local_label(misc_ref_invalid) /* 21 cons  */
     121         .long local_label(misc_ref_node) /* 22 catch_frame  */
     122         .long local_label(misc_ref_invalid) /* 23 imm  */
     123         .long local_label(misc_ref_invalid) /* 24 odd_fixnum  */
     124         .long local_label(misc_ref_invalid) /* 25 tra  */
     125         .long local_label(misc_ref_invalid) /* 26 misc  */
     126         .long local_label(misc_ref_u32) /* 27 dead_macptr  */
     127         .long local_label(misc_ref_invalid) /* 28 even_fixnum  */
     128         .long local_label(misc_ref_invalid) /* 29 cons  */
     129         .long local_label(misc_ref_node) /* 2a function  */
     130         .long local_label(misc_ref_invalid) /* 2b imm  */
     131         .long local_label(misc_ref_invalid) /* 2c odd_fixnum  */
     132         .long local_label(misc_ref_invalid) /* 2d nil  */
     133         .long local_label(misc_ref_invalid) /* 2e misc  */
     134         .long local_label(misc_ref_u32) /* 2f code_vector  */
     135        /* 30-3f  */
     136         .long local_label(misc_ref_invalid) /* 30 even_fixnum  */
     137         .long local_label(misc_ref_invalid) /* 31 cons  */
     138         .long local_label(misc_ref_node) /* 32 lisp_thread  */
     139         .long local_label(misc_ref_invalid) /* 33 imm  */
     140         .long local_label(misc_ref_invalid) /* 34 odd_fixnum  */
     141         .long local_label(misc_ref_invalid) /* 35 tra  */
     142         .long local_label(misc_ref_invalid) /* 36 misc  */
     143         .long local_label(misc_ref_u32) /* 37 creole  */
     144         .long local_label(misc_ref_invalid) /* 38 even_fixnum  */
     145         .long local_label(misc_ref_invalid) /* 39 cons  */
     146         .long local_label(misc_ref_node) /* 3a symbol  */
     147         .long local_label(misc_ref_invalid) /* 3b imm  */
     148         .long local_label(misc_ref_invalid) /* 3c odd_fixnum  */
     149         .long local_label(misc_ref_invalid) /* 3d nil  */
     150         .long local_label(misc_ref_invalid) /* 3e misc  */
     151         .long local_label(misc_ref_u32) /* 3f xcode_vector  */
     152        /* 40-4f  */
     153         .long local_label(misc_ref_invalid) /* 40 even_fixnum  */
     154         .long local_label(misc_ref_invalid) /* 41 cons  */
     155         .long local_label(misc_ref_node) /* 42 lock  */
     156         .long local_label(misc_ref_invalid) /* 43 imm  */
     157         .long local_label(misc_ref_invalid) /* 44 odd_fixnum  */
     158         .long local_label(misc_ref_invalid) /* 45 tra  */
     159         .long local_label(misc_ref_invalid) /* 46 misc  */
     160         .long local_label(misc_ref_invalid) /* 47 immheader  */
     161         .long local_label(misc_ref_invalid) /* 48 even_fixnum  */
     162         .long local_label(misc_ref_invalid) /* 49 cons  */
     163         .long local_label(misc_ref_node) /* 4a hash_vector  */
     164         .long local_label(misc_ref_invalid) /* 4b imm  */
     165         .long local_label(misc_ref_invalid) /* 4c odd_fixnum  */
     166         .long local_label(misc_ref_invalid) /* 4d tra  */
     167         .long local_label(misc_ref_invalid) /* 4e misc  */
     168         .long local_label(misc_ref_invalid) /* 4f immheader  */
     169        /* 50-5f  */
     170         .long local_label(misc_ref_invalid) /* 50 even_fixnum  */
     171         .long local_label(misc_ref_invalid) /* 51 cons  */
     172         .long local_label(misc_ref_node) /* 52 pool  */
     173         .long local_label(misc_ref_invalid) /* 53 imm  */
     174         .long local_label(misc_ref_invalid) /* 54 odd_fixnum  */
     175         .long local_label(misc_ref_invalid) /* 55 tra  */
     176         .long local_label(misc_ref_invalid) /* 56 misc  */
     177         .long local_label(misc_ref_invalid) /* 57 immheader  */
     178         .long local_label(misc_ref_invalid) /* 58 even_fixnum  */
     179         .long local_label(misc_ref_invalid) /* 59 cons  */
     180         .long local_label(misc_ref_node) /* 5a weak  */
     181         .long local_label(misc_ref_invalid) /* 5b imm  */
     182         .long local_label(misc_ref_invalid) /* 5c odd_fixnum  */
     183         .long local_label(misc_ref_invalid) /* 5d nil  */
     184         .long local_label(misc_ref_invalid) /* 5e misc  */
     185         .long local_label(misc_ref_invalid) /* 5f immheader  */
     186        /* 60-6f  */
     187         .long local_label(misc_ref_invalid) /* 60 even_fixnum  */
     188         .long local_label(misc_ref_invalid) /* 61 cons  */
     189         .long local_label(misc_ref_node) /* 62 package  */
     190         .long local_label(misc_ref_invalid) /* 63 imm  */
     191         .long local_label(misc_ref_invalid) /* 64 odd_fixnum  */
     192         .long local_label(misc_ref_invalid) /* 65 tra  */
     193         .long local_label(misc_ref_invalid) /* 66 misc  */
     194         .long local_label(misc_ref_invalid) /* 67 immheader  */
     195         .long local_label(misc_ref_invalid) /* 68 even_fixnum  */
     196         .long local_label(misc_ref_invalid) /* 69 cons  */
     197         .long local_label(misc_ref_node) /* 6a slot_vector  */
     198         .long local_label(misc_ref_invalid) /* 6b imm  */
     199         .long local_label(misc_ref_invalid) /* 6c odd_fixnum  */
     200         .long local_label(misc_ref_invalid) /* 6d tra  */
     201         .long local_label(misc_ref_invalid) /* 6e misc  */
     202         .long local_label(misc_ref_invalid) /* 6f immheader  */
     203        /* 70-7f  */
     204         .long local_label(misc_ref_invalid) /* 70 even_fixnum  */
     205         .long local_label(misc_ref_invalid) /* 71 cons  */
     206         .long local_label(misc_ref_node) /* 72 instance  */
     207         .long local_label(misc_ref_invalid) /* 73 imm  */
     208         .long local_label(misc_ref_invalid) /* 74 odd_fixnum  */
     209         .long local_label(misc_ref_invalid) /* 75 tra  */
     210         .long local_label(misc_ref_invalid) /* 76 misc  */
     211         .long local_label(misc_ref_invalid) /* 77 immheader  */
     212         .long local_label(misc_ref_invalid) /* 78 even_fixnum  */
     213         .long local_label(misc_ref_invalid) /* 79 cons  */
     214         .long local_label(misc_ref_node) /* 7a struct  */
     215         .long local_label(misc_ref_invalid) /* 7b imm  */
     216         .long local_label(misc_ref_invalid) /* 7c odd_fixnum  */
     217         .long local_label(misc_ref_invalid) /* 7d tra  */
     218         .long local_label(misc_ref_invalid) /* 7e misc  */
     219         .long local_label(misc_ref_invalid) /* 7f immheader  */
     220        /* 80-8f  */
     221         .long local_label(misc_ref_invalid) /* 80 even_fixnum  */
     222         .long local_label(misc_ref_invalid) /* 81 cons  */
     223         .long local_label(misc_ref_node) /* 82 istruct  */
     224         .long local_label(misc_ref_invalid) /* 83 imm  */
     225         .long local_label(misc_ref_invalid) /* 84 odd_fixnum  */
     226         .long local_label(misc_ref_invalid) /* 85 tra  */
     227         .long local_label(misc_ref_invalid) /* 86 misc  */
     228         .long local_label(misc_ref_invalid) /* 87 immheader  */
     229         .long local_label(misc_ref_invalid) /* 88 even_fixnum  */
     230         .long local_label(misc_ref_invalid) /* 89 cons  */
     231         .long local_label(misc_ref_node) /* 8a value_cell  */
     232         .long local_label(misc_ref_invalid) /* 8b imm  */
     233         .long local_label(misc_ref_invalid) /* 8c odd_fixnum  */
     234         .long local_label(misc_ref_invalid) /* 8d tra  */
     235         .long local_label(misc_ref_invalid) /* 8e misc  */
     236         .long local_label(misc_ref_invalid) /* 8f immheader  */
     237        /* 90-9f  */
     238         .long local_label(misc_ref_invalid) /* 90 even_fixnum  */
     239         .long local_label(misc_ref_invalid) /* 91 cons  */
     240         .long local_label(misc_ref_node) /* 92 xfunction  */
     241         .long local_label(misc_ref_invalid) /* 93 imm  */
     242         .long local_label(misc_ref_invalid) /* 94 odd_fixnum  */
     243         .long local_label(misc_ref_invalid) /* 95 tra  */
     244         .long local_label(misc_ref_invalid) /* 96 misc  */
     245         .long local_label(misc_ref_invalid) /* 97 immheader  */
     246         .long local_label(misc_ref_invalid) /* 98 even_fixnum  */
     247         .long local_label(misc_ref_invalid) /* 99 cons  */
     248         .long local_label(misc_ref_node) /* 9a arrayN  */
     249         .long local_label(misc_ref_invalid) /* 9b imm  */
     250         .long local_label(misc_ref_invalid) /* 9c odd_fixnum  */
     251         .long local_label(misc_ref_invalid) /* 9d tra  */
     252         .long local_label(misc_ref_invalid) /* 9e misc  */
     253         .long local_label(misc_ref_invalid) /* 9f immheader  */
     254        /* a0-af  */
     255         .long local_label(misc_ref_invalid) /* a0 even_fixnum  */
     256         .long local_label(misc_ref_invalid) /* a1 cons  */
     257         .long local_label(misc_ref_node) /* a2 vectorH  */
     258         .long local_label(misc_ref_invalid) /* a3 imm  */
     259         .long local_label(misc_ref_invalid) /* a4 odd_fixnum  */
     260         .long local_label(misc_ref_invalid) /* a5 tra  */
     261         .long local_label(misc_ref_invalid) /* a6 misc  */
     262         .long local_label(misc_ref_single_float_vector) /* a7 sf_vector  */
     263         .long local_label(misc_ref_invalid) /* a8 even_fixnum  */
     264         .long local_label(misc_ref_invalid) /* a9 cons  */
     265         .long local_label(misc_ref_node) /* aa simple_vector  */
     266         .long local_label(misc_ref_invalid) /* ab imm  */
     267         .long local_label(misc_ref_invalid) /* ac odd_fixnum  */
     268         .long local_label(misc_ref_invalid) /* ad tra  */
     269         .long local_label(misc_ref_invalid) /* ae misc  */
     270         .long local_label(misc_ref_u32) /* af u32  */
     271        /* b0-bf  */
     272         .long local_label(misc_ref_invalid) /* b0 even_fixnum  */
     273         .long local_label(misc_ref_invalid) /* b1 cons  */
     274         .long local_label(misc_ref_invalid) /* b2 nodeheader  */
     275         .long local_label(misc_ref_invalid) /* b3 imm  */
     276         .long local_label(misc_ref_invalid) /* b4 odd_fixnum  */
     277         .long local_label(misc_ref_invalid) /* b5 tra  */
     278         .long local_label(misc_ref_invalid) /* b6 misc  */
     279         .long local_label(misc_ref_s32) /* b7 s32  */
     280         .long local_label(misc_ref_invalid) /* b8 even_fixnum  */
     281         .long local_label(misc_ref_invalid) /* b9 cons  */
     282         .long local_label(misc_ref_invalid) /* ba nodeheader  */
     283         .long local_label(misc_ref_invalid) /* bb imm  */
     284         .long local_label(misc_ref_invalid) /* bc odd_fixnum  */
     285         .long local_label(misc_ref_invalid) /* bd tra  */
     286         .long local_label(misc_ref_invalid) /* be misc  */
     287         .long local_label(misc_ref_fixnum_vector) /* bf fixnum_vector  */
     288        /* c0-cf  */
     289         .long local_label(misc_ref_invalid) /* c0 even_fixnum  */
     290         .long local_label(misc_ref_invalid) /* c1 cons  */
     291         .long local_label(misc_ref_invalid) /* c2 nodeheader  */
     292         .long local_label(misc_ref_invalid) /* c3 imm  */
     293         .long local_label(misc_ref_invalid) /* c4 odd_fixnum  */
     294         .long local_label(misc_ref_invalid) /* c5 tra  */
     295         .long local_label(misc_ref_invalid) /* c6 misc  */
     296         .long local_label(misc_ref_new_string) /* c7 new_string  */
     297         .long local_label(misc_ref_invalid) /* c8 even_fixnum  */
     298         .long local_label(misc_ref_invalid) /* c9 cons  */
     299         .long local_label(misc_ref_invalid) /* ca nodeheader  */
     300         .long local_label(misc_ref_invalid) /* cb imm  */
     301         .long local_label(misc_ref_invalid) /* cc odd_fixnum  */
     302         .long local_label(misc_ref_invalid) /* cd tra  */
     303         .long local_label(misc_ref_invalid) /* ce misc  */
     304         .long local_label(misc_ref_u8) /* cf u8  */
     305        /* d0-df  */
     306         .long local_label(misc_ref_invalid) /* d0 even_fixnum  */
     307         .long local_label(misc_ref_invalid) /* d1 cons  */
     308         .long local_label(misc_ref_invalid) /* d2 nodeheader  */
     309         .long local_label(misc_ref_invalid) /* d3 imm  */
     310         .long local_label(misc_ref_invalid) /* d4 odd_fixnum  */
     311         .long local_label(misc_ref_invalid) /* d5 tra  */
     312         .long local_label(misc_ref_invalid) /* d6 misc  */
     313         .long local_label(misc_ref_s8)      /* d7 s8  */
     314         .long local_label(misc_ref_invalid) /* d8 even_fixnum  */
     315         .long local_label(misc_ref_invalid) /* d9 cons  */
     316         .long local_label(misc_ref_invalid) /* da nodeheader  */
     317         .long local_label(misc_ref_invalid) /* db imm  */
     318         .long local_label(misc_ref_invalid) /* dc odd_fixnum  */
     319         .long local_label(misc_ref_invalid) /* dd tra  */
     320         .long local_label(misc_ref_invalid) /* de misc  */
     321         .long local_label(misc_ref_old_string) /* df (old)subtag_simple_base_string  */
     322        /* e0-ef  */
     323         .long local_label(misc_ref_invalid) /* e0 even_fixnum  */
     324         .long local_label(misc_ref_invalid) /* e1 cons  */
     325         .long local_label(misc_ref_invalid) /* e2 nodeheader  */
     326         .long local_label(misc_ref_invalid) /* e3 imm  */
     327         .long local_label(misc_ref_invalid) /* e4 odd_fixnum  */
     328         .long local_label(misc_ref_invalid) /* e5 tra  */
     329         .long local_label(misc_ref_invalid) /* e6 misc  */
     330         .long local_label(misc_ref_u16) /* e7 u16  */
     331         .long local_label(misc_ref_invalid) /* e8 even_fixnum  */
     332         .long local_label(misc_ref_invalid) /* e9 cons  */
     333         .long local_label(misc_ref_invalid) /* ea nodeheader  */
     334         .long local_label(misc_ref_invalid) /* eb imm  */
     335         .long local_label(misc_ref_invalid) /* ec odd_fixnum  */
     336         .long local_label(misc_ref_invalid) /* ed tra  */
     337         .long local_label(misc_ref_invalid) /* ee misc  */
     338         .long local_label(misc_ref_s16) /* ef s16  */
     339        /* f0-ff  */
     340         .long local_label(misc_ref_invalid) /* f0 even_fixnum  */
     341         .long local_label(misc_ref_invalid) /* f1 cons  */
     342         .long local_label(misc_ref_invalid) /* f2 nodeheader  */
     343         .long local_label(misc_ref_invalid) /* f3 imm  */
     344         .long local_label(misc_ref_invalid) /* f4 odd_fixnum  */
     345         .long local_label(misc_ref_invalid) /* f5 tra  */
     346         .long local_label(misc_ref_invalid) /* f6 misc  */
     347         .long local_label(misc_ref_double_float_vector) /* f7 df vector  */
     348         .long local_label(misc_ref_invalid) /* f8 even_fixnum  */
     349         .long local_label(misc_ref_invalid) /* f9 cons  */
     350         .long local_label(misc_ref_invalid) /* fa nodeheader  */
     351         .long local_label(misc_ref_invalid) /* fb imm  */
     352         .long local_label(misc_ref_invalid) /* fc odd_fixnum  */
     353         .long local_label(misc_ref_invalid) /* fd tra  */
     354         .long local_label(misc_ref_invalid) /* fe misc  */
     355         .long local_label(misc_ref_bit_vector) /* ff bit_vector  */
     356local_label(misc_ref_invalid):
     357        __(jmp _SPksignalerr)
     358local_label(misc_ref_u32):
     359        __(movl misc_data_offset(%arg_y,%arg_z),%imm0)
     360        __(jmp _SPmakeu32)
     361        __(ret)
     362local_label(misc_ref_node):         
     363        __(movl misc_data_offset(%arg_y,%arg_z),%arg_z)
     364        __(ret)
     365local_label(misc_ref_single_float_vector):
     366local_label(misc_ref_s32):
     367local_label(misc_ref_fixnum_vector):
     368local_label(misc_ref_new_string):
     369local_label(misc_ref_u8):
     370local_label(misc_ref_s8):
  • branches/ia32/lisp-kernel/x86-subprims32.s

    r7243 r7286  
     1        include(lisp.s)
     2        _beginfile
     3
    14/* This is called from C code when a thread (including the initial thread) */
    25/* starts execution.  (Historically, it also provided a primitive way of */
Note: See TracChangeset for help on using the changeset viewer.