Changeset 9442


Ignore:
Timestamp:
May 9, 2008, 10:27:06 AM (11 years ago)
Author:
gb
Message:

Better %COPY-IVECTOR-TO-IVECTOR when things are aligned.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711-perf/ccl/level-0/X86/x86-misc.lisp

    r8027 r9442  
    8080
    8181
    82 
    83 (defx86lapfunction %copy-ivector-to-ivector ((src-offset 16)
    84                                              (src-byte-offset 8)
    85                                              #|(ra 0)|#
    86                                              (dest arg_x)
    87                                              (dest-byte-offset arg_y)
    88                                              (nbytes arg_z))
     82(defun %copy-ivector-to-ivector (src src-byte-offset dest dest-byte-offset nbytes)
     83  (declare (fixnum src-byte-offset dest-byte-offset nbytes))
     84  (if (or (eq src dest)
     85          (not (eql 0 src-byte-offset))
     86          (not (eql 0 dest-byte-offset))
     87          (< nbytes 8))
     88    (%copy-ivector-to-ivector-bytes src src-byte-offset dest dest-byte-offset nbytes)
     89    (%copy-ivector-to-ivector-words src dest (ash nbytes -3) (logand nbytes 7))))
     90
     91(defx86lapfunction %copy-ivector-to-ivector-words ((src 8)
     92                                                   #|(ra 0)|#
     93                                                   (dest arg_x)
     94                                                   (nwords arg_y)
     95                                                   (nbytes arg_z))
     96  (let ((rsrc temp0)
     97         (ridx imm1)
     98         (rval imm0))
     99    (xorl (%l ridx) (%l ridx))
     100    (movq (@ src (% rsp)) (% rsrc))
     101    (jmp @word-test)
     102    @word-loop
     103    (movq (@ x8664::misc-data-offset (% rsrc) (% ridx)) (% rval))
     104    (movq (% rval) (@ x8664::misc-data-offset (% dest) (% ridx)))
     105    (addq ($ 8) (% ridx))
     106    @word-test
     107    (cmpq (% ridx) (% nwords))
     108    (jne @word-loop)
     109    (jmp @byte-test)
     110    @byte-loop
     111    (movb (@ x8664::misc-data-offset (% rsrc) (% ridx)) (%b rval))
     112    (movb (%b rval) (@ x8664::misc-data-offset (% dest) (% ridx)))
     113    (addq ($ 1) (% ridx))
     114    @byte-test
     115    (subq ($ '1) (% nbytes))
     116    (jns @byte-loop)
     117    (movq (% dest) (% arg_z))
     118    (single-value-return 3)))
     119         
     120   
     121   
     122
     123(defx86lapfunction %copy-ivector-to-ivector-bytes ((src-offset 16)
     124                                                   (src-byte-offset 8)
     125                                                   #|(ra 0)|#
     126                                                   (dest arg_x)
     127                                                   (dest-byte-offset arg_y)
     128                                                   (nbytes arg_z))
    89129  (let ((rsrc temp0)
    90130        (rsrc-byte-offset temp1))
Note: See TracChangeset for help on using the changeset viewer.