Changeset 13941 for branches


Ignore:
Timestamp:
Jul 8, 2010, 5:03:48 PM (9 years ago)
Author:
gb
Message:

arm-asmutils.s: Actually implement atomic_ior and atomic_and, so that
calling them doesn't call whatever follows them in memory.
arm-exceptions.h: Don't mask the field that contains a constant's rotate
count in the definition of IS_SUB_FROM_ALLOCPTR.
l0-bignum32: don't reference *TRUNCATE-X* or *TRUNCATE-Y*; we're not
recycling preallocated bignums as the SPICE Lisp/CMUCL code did, and
using special variables to pass parameters around just makes the code
harder to understand.
arm-float.lisp: MAKE-BIG-53 is storing into a bignum, not a double-float.

Location:
branches/arm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/level-0/ARM/arm-float.lisp

    r13926 r13941  
    122122  (orr imm1 imm1 (:lsl imm0 (:$ 28)))
    123123  (mov imm0 (:lsr imm0 (:$ 4)))
    124   (str imm0 (:@ big (:$ arm::double-float.val-high)))
    125   (str imm1 (:@ big (:$ arm::double-float.val-low)))
     124  (str imm0 (:@ big (:$ (+ arm::misc-data-offset 4))))
     125  (str imm1 (:@ big (:$ arm::misc-data-offset)))
    126126  (bx lr))
    127127
  • branches/arm/level-0/l0-bignum32.lisp

    r13932 r13941  
    14831483                                 (let* ((res-len-1 (1- len-y)))
    14841484                                   (declare (fixnum res-len-1))
    1485                                    (bignum-shift-right-loop-1 y-shift truncate-x truncate-y res-len-1 0)))                               
     1485                                   (bignum-shift-right-loop-1 y-shift truncate-x truncate-x res-len-1 0)))                               
    14861486                               (let ((the-res (%normalize-bignum-macro truncate-x )))
    14871487                                 (if (not (fixnump the-res))
  • branches/arm/lisp-kernel/arm-asmutils.s

    r13925 r13941  
    8585_endfn
    8686
    87 /* Logior the value in *r3 with the value in r4 (presumably a bitmask with exactly 1 */
     87/* Logior the value in *r0 with the value in r1 (presumably a bitmask with exactly 1 */
    8888/* bit set.)  Return non-zero if any of the bits in that bitmask were already set. */
    8989       
    9090_exportfn(C(atomic_ior))
    91 dnl         __(sync)
    92 dnl 1:  __(lrarx(r5,0,r3))
    93 dnl         __(or r6,r4,r5)
    94 dnl     __(strcx(r6,0,r3))
    95 dnl     __(bne- 1b)
    96 dnl     __(isync)
    97 dnl     __(and r3,r4,r5)
    98 dnl     __(blr)
     91        __(stmdb sp!,{r4,lr})
     920:      __(ldrex r2,[r0])
     93        __(orr r3,r2,r1)
     94        __(strex r4,r3,[r0])
     95        __(cmp r4,#0)
     96        __(bne 0b)
     97        __(mov r0,r2)
     98        __(ldmia sp!,{r4,pc})
    9999_endfn
    100100
    101101
    102 /* Logand the value in *r3 with the value in r4 (presumably a bitmask with exactly 1 */
    103 /* bit set.)  Return the value now in *r3 (for some value of "now" */
     102/* Logand the value in *r0 with the value in r1 (presumably a bitmask with exactly 1 */
     103/* bit set.)  Return the value now in *r0 (for some value of "now" */
    104104
    105105_exportfn(C(atomic_and))
    106 dnl         __(sync)
    107 dnl 1:  __(lrarx(r5,0,r3))
    108 dnl         __(and r6,r4,r5)
    109 dnl     __(strcx(r6,0,r3))
    110 dnl     __(bne- 1b)
    111 dnl     __(isync)
    112 dnl     __(mr r3,r6)
    113 dnl     __(blr)
     1060:      __(ldrex r2,[r0])
     107        __(and r2,r2,r1)
     108        __(strex r3,r2,[r0])
     109        __(cmp r3,#0)
     110        __(bne 0b)
     111        __(mov r0,r2)
     112        __(bx lr)
    114113_endfn
    115114               
  • branches/arm/lisp-kernel/arm-exceptions.h

    r13903 r13941  
    6868
    6969#define IS_SUB_RM_FROM_ALLOCPTR(i)   (((i)&0x0ffff000) == 0x004cc000)
    70 #define IS_SUB_FROM_ALLOCPTR(i)      (((i)&0x0fffff00) == 0x024cc000)
     70#define IS_SUB_FROM_ALLOCPTR(i)      (((i)&0x0ffff000) == 0x024cc000)
    7171#define IS_SUB_LO_FROM_ALLOCPTR(i)   (((i)&0x0fffff00) == 0x024cc000)
    7272#define IS_SUB_HI_FROM_ALLOCPTR(i)   (IS_SUB_FROM_ALLOCPTR(i) && \
Note: See TracChangeset for help on using the changeset viewer.