Changeset 15156
- Timestamp:
- Dec 25, 2011, 10:54:15 PM (13 years ago)
- Location:
- trunk/source
- Files:
-
- 3 edited
-
compiler/X86/x86-asm.lisp (modified) (1 diff)
-
compiler/X86/x862.lisp (modified) (1 diff)
-
level-0/X86/X8632/x8632-misc.lisp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/X86/x86-asm.lisp
r14852 r15156 1853 1853 1854 1854 ;; movdqa 1855 (def-x86-opcode (movdqa :cpu64)((:regxmm :insert-xmm-reg) (:anymem :insert-memory))1855 (def-x86-opcode movdqa ((:regxmm :insert-xmm-reg) (:anymem :insert-memory)) 1856 1856 #x0f7f #o300 #x0 #x66) 1857 (def-x86-opcode (movdqa :cpu64)((:anymem :insert-memory) (:regxmm :insert-xmm-reg))1857 (def-x86-opcode movdqa ((:anymem :insert-memory) (:regxmm :insert-xmm-reg)) 1858 1858 #x0f6f #o000 #x0 #x66) 1859 1859 1860 1860 (def-x86-opcode movdqu ((:regxmm :insert-xmm-reg) (:anymem :insert-memory)) 1861 #x0f7f #o300 #x0 #xf3) 1862 (def-x86-opcode movdqu ((:anymem :insert-memory) (:regxmm :insert-xmm-reg)) 1863 #x0f6f #o000 #x0 #xf3) 1864 1865 1866 ;; sign-extending mov 1867 (def-x86-opcode movsbl ((:reg8 :insert-modrm-rm) (:reg32 :insert-modrm-reg)) 1868 #x0fbe #o300 0) 1861 1869 ;; sign-extending mov 1862 1870 (def-x86-opcode movsbl ((:reg8 :insert-modrm-rm) (:reg32 :insert-modrm-reg)) -
trunk/source/compiler/X86/x862.lisp
r15149 r15156 10597 10597 (x862-one-targeted-reg-form seg other other-reg) 10598 10598 (! %natural-logand-c other-reg constant) 10599 (<- other-reg)))) 10599 (if (and (typep constant *nx-target-fixnum-type*) 10600 (node-reg-p vreg)) 10601 (! box-fixnum vreg other-reg) 10602 (<- other-reg))))) 10600 10603 (^)))))) 10601 10604 -
trunk/source/level-0/X86/X8632/x8632-misc.lisp
r14711 r15156 21 21 ;;; a byte at a time. 22 22 ;;; Does no arg checking of any kind. Really. 23 (defun %copy-ptr-to-ivector (src src-byte-offset dest dest-byte-offset nbytes) 24 (declare (fixnum src-byte-offset dest-byte-offset nbytes) 25 (optimize (speed 3) (safety 0))) 26 (let* ((ptr-align (logand 7 (%ptr-to-int src)))) 27 (declare (type (mod 8) ptr-align)) 28 (if (and (= 0 (logand nbytes 3)) 29 (= 0 (logand dest-byte-offset 3)) 30 (= 0 (logand (the fixnum (+ ptr-align src-byte-offset)) 3))) 31 (%copy-ptr-to-ivector-32bit src src-byte-offset dest dest-byte-offset nbytes) 32 (%copy-ptr-to-ivector-8bit src src-byte-offset dest dest-byte-offset nbytes)) 33 dest)) 34 35 ;;; We can exploit the fact that SRC-BYTE-OFFSET and DEST-BYTE-OFFSET 36 ;;; are both multiples of 4 (and therefore still fixnums when unboxed). 37 (defx8632lapfunction %copy-ptr-to-ivector-32bit ((psrc 12) 38 (psrc-byte-offset 8) 39 (pdest 4) 40 #|(ra 0)|# 41 (dest-byte-offset arg_y) 42 (nbytes arg_z)) 43 44 (let ((foreign-ptr imm0) ;raw foreign pointer 45 (ivector temp1)) ;destination ivector 46 (movl (@ psrc (% esp)) (% temp1)) 47 (movl (@ psrc-byte-offset (% esp)) (% foreign-ptr)) 48 (sarl ($ x8632::word-shift)(% foreign-ptr)) 49 (addl (@ x8632::macptr.address (% temp1)) (% foreign-ptr)) 50 (movl (@ pdest (% esp)) (% ivector)) 51 (sarl ($ x8632::word-shift) (% dest-byte-offset)) 52 (jmp @test16) 53 @loop16 54 (movdqu (@ (% foreign-ptr)) (% xmm0)) 55 (movdqu (% xmm0) (@ x8632::misc-data-offset (% ivector) (% dest-byte-offset))) 56 (addl ($ 16) (% foreign-ptr)) 57 (addl ($ 16) (% dest-byte-offset)) 58 (subl ($ '16) (% nbytes)) 59 @test16 60 (cmpl ($ '16) (% nbytes)) 61 (jge @loop16) 62 (testl (% nbytes) (% nbytes)) 63 (je @done) 64 @loop4 65 (movd (@ (% foreign-ptr)) (% mm0)) 66 (movd (% mm0) (@ x8632::misc-data-offset (% ivector) (% dest-byte-offset))) 67 (addl ($ 4) (% foreign-ptr)) 68 (addl ($ 4) (% dest-byte-offset)) 69 (subl ($ '4) (% nbytes)) 70 (jne @loop4) 71 @done 72 (movl (% ivector) (% arg_z)) 73 (single-value-return 5))) 23 74 24 75 ;;; I went ahead and used the INC and DEC instructions here, since … … 29 80 ;;; might be worth a try. 30 81 31 (defx8632lapfunction %copy-ptr-to-ivector ((src 12)32 (src-byte-offset 8)33 (dest 4)34 #|(ra 0)|#35 (dest-byte-offset arg_y)36 (nbytes arg_z))82 (defx8632lapfunction %copy-ptr-to-ivector-8bit ((src 12) 83 (src-byte-offset 8) 84 (dest 4) 85 #|(ra 0)|# 86 (dest-byte-offset arg_y) 87 (nbytes arg_z)) 37 88 (mark-as-imm temp0) 38 89 (mark-as-imm arg_y)
Note:
See TracChangeset
for help on using the changeset viewer.
