Changeset 13443
- Timestamp:
- Feb 8, 2010, 9:33:20 PM (15 years ago)
- File:
-
- 1 edited
-
trunk/source/compiler/X86/x862.lisp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/X86/x862.lisp
r13253 r13443 1523 1523 (defun x862-box-s32 (seg node-dest s32-src) 1524 1524 (with-x86-local-vinsn-macros (seg) 1525 (if (target-arch-case 1526 (:x8632 nil) 1527 (:x8664 t)) 1528 (! box-fixnum node-dest s32-src) 1525 (target-arch-case 1526 (:x8632 1529 1527 (let* ((arg_z ($ *x862-arg-z*)) 1530 (imm0 ($ *x862-imm0* :mode :s32))) 1531 (x862-copy-register seg imm0 s32-src) 1532 (! call-subprim (subprim-name->offset '.SPmakes32)) 1533 (x862-copy-register seg node-dest arg_z))))) 1528 (imm0 ($ *x862-imm0* :mode :s32))) 1529 (x862-copy-register seg imm0 s32-src) 1530 (! call-subprim (subprim-name->offset '.SPmakes32)) 1531 (x862-copy-register seg node-dest arg_z))) 1532 (:x8664 1533 (! box-fixnum node-dest s32-src))))) 1534 1534 1535 1535 (defun x862-box-s64 (seg node-dest s64-src) … … 1628 1628 (is-32-bit 1629 1629 (if (and index-known-fixnum (<= index-known-fixnum (arch::target-max-32-bit-constant-index arch))) 1630 (cond ((eq type-keyword :single-float-vector) 1631 (with-fp-target () (fp-val :single-float) 1632 (if (and (eql vreg-class hard-reg-class-fpr) 1633 (eql vreg-mode hard-reg-class-fpr-mode-single)) 1634 (setq fp-val vreg)) 1635 (! misc-ref-c-single-float fp-val src index-known-fixnum) 1636 (if (eql vreg-class hard-reg-class-fpr) 1637 (<- fp-val) 1638 (ensuring-node-target (target vreg) 1639 (target-arch-case 1640 (:x8632 (x862-single->heap seg target fp-val)) 1641 (:x8664 (! single->node target fp-val))))))) 1642 (t 1643 (with-additional-imm-reg () 1644 (with-imm-target () temp 1645 (if is-signed 1646 (! misc-ref-c-s32 temp src index-known-fixnum) 1647 (! misc-ref-c-u32 temp src index-known-fixnum)) 1648 (ensuring-node-target (target vreg) 1649 (if (eq type-keyword :simple-string) 1650 (! u32->char target temp) 1651 (target-arch-case 1652 (:x8632 1653 (if is-signed 1654 (x862-box-s32 seg target temp) 1655 (x862-box-u32 seg target temp))) 1656 (:x8664 1657 (! box-fixnum target temp))))))))) 1630 (case type-keyword 1631 (:single-float-vector 1632 (with-fp-target () (fp-val :single-float) 1633 (if (and (eql vreg-class hard-reg-class-fpr) 1634 (eql vreg-mode hard-reg-class-fpr-mode-single)) 1635 (setq fp-val vreg)) 1636 (! misc-ref-c-single-float fp-val src index-known-fixnum) 1637 (if (eql vreg-class hard-reg-class-fpr) 1638 (<- fp-val) 1639 (ensuring-node-target (target vreg) 1640 (target-arch-case 1641 (:x8632 (x862-single->heap seg target fp-val)) 1642 (:x8664 (! single->node target fp-val))))))) 1643 (:signed-32-bit-vector 1644 (with-imm-target () (s32-reg :s32) 1645 (if (eql vreg-mode hard-reg-class-gpr-mode-s32) 1646 (setq s32-reg vreg)) 1647 (! misc-ref-c-s32 s32-reg src index-known-fixnum) 1648 (unless (eq vreg s32-reg) 1649 (ensuring-node-target (target vreg) 1650 (x862-box-s32 seg target s32-reg))))) 1651 (:unsigned-32-bit-vector 1652 (with-imm-target () (u32-reg :u32) 1653 (if (eql vreg-mode hard-reg-class-gpr-mode-u32) 1654 (setq u32-reg vreg)) 1655 (! misc-ref-c-u32 u32-reg src index-known-fixnum) 1656 (unless (eq vreg u32-reg) 1657 (ensuring-node-target (target vreg) 1658 (x862-box-u32 seg target u32-reg))))) 1659 (t 1660 (with-imm-target () temp 1661 (if is-signed 1662 (! misc-ref-c-s32 temp src index-known-fixnum) 1663 (! misc-ref-c-u32 temp src index-known-fixnum)) 1664 (ensuring-node-target (target vreg) 1665 (if (eq type-keyword :simple-string) 1666 (! u32->char target temp) 1667 (if is-signed 1668 (x862-box-s32 seg target temp) 1669 (x862-box-u32 seg target temp))))))) 1658 1670 (with-imm-target () idx-reg 1659 1671 (if index-known-fixnum 1660 1672 (x862-absolute-natural seg idx-reg nil (ash index-known-fixnum 2)) 1661 1673 (! scale-32bit-misc-index idx-reg unscaled-idx)) 1662 (cond ((eq type-keyword :single-float-vector) 1663 (with-fp-target () (fp-val :single-float) 1664 (if (and (eql vreg-class hard-reg-class-fpr) 1665 (eql vreg-mode hard-reg-class-fpr-mode-single)) 1666 (setq fp-val vreg)) 1667 (! misc-ref-single-float fp-val src idx-reg) 1668 (if (eq vreg-class hard-reg-class-fpr) 1669 (<- fp-val) 1670 (ensuring-node-target (target vreg) 1671 (target-arch-case 1672 (:x8632 (x862-single->heap seg target fp-val)) 1673 (:x8664 (! single->node target fp-val))))))) 1674 (t 1675 (with-imm-target () temp 1674 (case type-keyword 1675 (:single-float-vector 1676 (with-fp-target () (fp-val :single-float) 1677 (if (and (eql vreg-class hard-reg-class-fpr) 1678 (eql vreg-mode hard-reg-class-fpr-mode-single)) 1679 (setq fp-val vreg)) 1680 (! misc-ref-single-float fp-val src idx-reg) 1681 (if (eq vreg-class hard-reg-class-fpr) 1682 (<- fp-val) 1683 (ensuring-node-target (target vreg) 1684 (target-arch-case 1685 (:x8632 (x862-single->heap seg target fp-val)) 1686 (:x8664 (! single->node target fp-val))))))) 1687 (:signed-32-bit-vector 1688 (with-imm-target () (s32-reg :s32) 1689 (if (eql vreg-mode hard-reg-class-gpr-mode-s32) 1690 (setq s32-reg vreg)) 1691 (! misc-ref-s32 s32-reg src idx-reg) 1692 (unless (eq vreg s32-reg) 1693 (ensuring-node-target (target vreg) 1694 (x862-box-s32 seg target s32-reg))))) 1695 (:unsigned-32-bit-vector 1696 (with-imm-target () (u32-reg :u32) 1697 (if (eql vreg-mode hard-reg-class-gpr-mode-u32) 1698 (setq u32-reg vreg)) 1699 (! misc-ref-u32 u32-reg src idx-reg) 1700 (unless (eq vreg u32-reg) 1701 (ensuring-node-target (target vreg) 1702 (x862-box-u32 seg target u32-reg))))) 1703 (t 1704 (with-imm-target () temp 1705 (if is-signed 1706 (! misc-ref-s32 temp src idx-reg) 1707 (! misc-ref-u32 temp src idx-reg)) 1708 (ensuring-node-target (target vreg) 1709 (if (eq type-keyword :simple-string) 1710 (! u32->char target temp) 1676 1711 (if is-signed 1677 (! misc-ref-s32 temp src idx-reg) 1678 (! misc-ref-u32 temp src idx-reg)) 1679 (ensuring-node-target (target vreg) 1680 (if (eq type-keyword :simple-string) 1681 (! u32->char target temp) 1682 (target-arch-case 1683 (:x8632 (if is-signed 1684 (x862-box-s32 seg target temp) 1685 (x862-box-u32 seg target temp))) 1686 (:x8664 (! box-fixnum target temp))))))))))) 1712 (x862-box-s32 seg target temp) 1713 (x862-box-u32 seg target temp)))))))))) 1687 1714 (is-8-bit 1688 1715 (with-imm-target () temp
Note:
See TracChangeset
for help on using the changeset viewer.
