Changeset 14472
- Timestamp:
- Dec 8, 2010, 11:55:48 AM (14 years ago)
- Location:
- trunk/source
- Files:
-
- 5 edited
-
compiler/ARM/arm-vinsns.lisp (modified) (7 diffs)
-
compiler/vinsn.lisp (modified) (1 diff)
-
lib/ffi-linuxarm.lisp (modified) (1 diff)
-
lisp-kernel/arm-gc.c (modified) (2 diffs)
-
lisp-kernel/linuxarm/Makefile (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/ARM/arm-vinsns.lisp
r14340 r14472 669 669 (src :address) 670 670 (index :s16const)) 671 ((low (:u32 #.arm::imm0)) 672 (high (:u32 #.arm::imm1)) 673 (addr (:u32 #.arm::imm2)))) ; addr should be :address 671 ((addr :u32))) 674 672 (add addr src (:$ index)) 675 (fmrrd low high src) 676 (strd low (:@ addr (:$ 0)))) 673 (fstd src (:@ addr (:$ 0)))) 677 674 678 675 (define-arm-vinsn (mem-set-double-float :predicatable) … … 681 678 (src :address) 682 679 (index :s32)) 683 ((low (:u32 #.arm::imm0)) 684 (high (:u32 #.arm::imm1)) 685 (addr (:u32 #.arm::imm2)))) ; addr should be :address 680 ((addr :u32))) 686 681 (add addr src index) 687 (fmrrd low high src) 688 (strd low (:@ addr (:$ 0)))) 682 (fstd src (:@ addr (:$ 0)))) 689 683 690 684 (define-arm-vinsn (mem-ref-c-single-float :predicatable) … … 710 704 (index :s16const)) 711 705 ((temp :u32))) 712 (fmrs temp src)706 (fmrs temp val) 713 707 (str temp (:@ src (:$ index)))) 714 708 … … 719 713 (index :s32)) 720 714 ((temp :u32))) 721 (fmrs temp src)722 (str temp (:@ src (:$ index))))715 (fmrs temp val) 716 (str temp (:@ src index))) 723 717 724 718 … … 2211 2205 ((val :s8)) 2212 2206 ()) 2213 (mov result (:ls rval (:$ 24)))2214 (mov result (:asr val(:$ (- 24 arm::fixnumshift)))))2207 (mov result (:lsl val (:$ 24))) 2208 (mov result (:asr result (:$ (- 24 arm::fixnumshift))))) 2215 2209 2216 2210 … … 2357 2351 (strd low (:@ dest (:$ arm::double-float.value)))) 2358 2352 2359 (define-arm-vinsn (get-double :predicatable )2353 (define-arm-vinsn (get-double :predicatable :sets-lr) 2360 2354 (((target :double-float)) 2361 ((source :lisp)) 2362 ((low (:u32 #.arm::imm0)) 2363 (high (:u32 #.arm::imm1)))) 2364 (ldrd low (:@ source (:$ arm::double-float.value))) 2365 (fmdrr target low high)) 2355 ((source :lisp))) 2356 (add lr source (:$ arm::double-float.pad)) 2357 (fldd target (:@ lr (:$ (- arm::double-float.value arm::double-float.pad))))) 2366 2358 2367 2359 ;;; Extract a double-float value, typechecking in the process. … … 2369 2361 ;;; instead of replicating it .. 2370 2362 2371 (define-arm-vinsn get-double? (((target :double-float))2372 ((source :lisp))2373 ((low (:u32 #.arm::imm0))2374 (high (:u32 #.arm::imm1))))2375 (and lowsource (:$ arm::tagmask))2376 (cmp low(:$ arm::tag-misc))2377 (ldrbeq low(:@ source (:$ arm::misc-subtag-offset)))2378 (cmp imm0(:$ arm::subtag-double-float))2363 (define-arm-vinsn (get-double? :sets-lr) 2364 (((target :double-float)) 2365 ((source :lisp)) 2366 ((tag :u8))) 2367 (and tag source (:$ arm::tagmask)) 2368 (cmp tag (:$ arm::tag-misc)) 2369 (ldrbeq tag (:@ source (:$ arm::misc-subtag-offset))) 2370 (cmp tag (:$ arm::subtag-double-float)) 2379 2371 (uuo-error-reg-not-xtype (:? ne) source (:$ arm::subtag-double-float)) 2380 ( ldrd imm0 (:@ source (:$ arm::double-float.value)))2381 (f mdrr target imm0 imm1))2372 (add lr source (:$ arm::double-float.pad)) 2373 (fldd target (:@ lr (:$ (- arm::double-float.value arm::double-float.pad))))) 2382 2374 2383 2375 -
trunk/source/compiler/vinsn.lisp
r14258 r14472 265 265 :sp 266 266 :predicatable ; all instructions can be predicated, no instructions set or test condition codes. 267 :sets-lr ; uses the link register, if there is one. 267 268 )) 268 269 -
trunk/source/lib/ffi-linuxarm.lisp
r14119 r14472 148 148 (cond ((<= bits 8) 149 149 (if signed 150 '%get-signed-byte '150 '%get-signed-byte 151 151 '%get-unsigned-byte)) 152 152 ((<= bits 16) -
trunk/source/lisp-kernel/arm-gc.c
r14366 r14472 1006 1006 { 1007 1007 natural *regs = (natural *) xpGPRvector(xp); 1008 LispObj lr_value; 1008 1009 1009 1010 int r; … … 1025 1026 1026 1027 mark_pc_root(ptr_to_lispobj(xpPC(xp))); 1027 mark_pc_root(ptr_to_lispobj(xpLR(xp))); 1028 1029 1028 lr_value = ptr_to_lispobj(xpLR(xp)); 1029 if (*((LispObj *)lr_value) == 0) { /* pointing into a double-float */ 1030 mark_root(untag(lr_value)+fulltag_misc); 1031 } else { 1032 mark_pc_root(lr_value); 1033 } 1030 1034 } 1031 1035 -
trunk/source/lisp-kernel/linuxarm/Makefile
r14391 r14472 22 22 AS = as 23 23 M4 = m4 24 ASFLAGS = -mfpu=vfp v224 ASFLAGS = -mfpu=vfp 25 25 M4FLAGS = -DLINUX -DARM 26 26 CDEFINES = -DLINUX -DARM -D_REENTRANT -D_GNU_SOURCE -DUSE_FUTEX -DSVN_REVISION=$(SVN_REVISION)
Note:
See TracChangeset
for help on using the changeset viewer.
