Ignore:
Timestamp:
Dec 5, 2011, 10:25:20 PM (8 years ago)
Author:
gb
Message:

ARM-specific changes, mostly.

When running lisp code (in almost all cases), keep the constant 0.0d0
in the d7 register (and therefore 0.0s0 in s14 and s15). We use d7 as
a vector header when saving non-volatile FPRs on the stack; we
actually only modify s14, so we now restore s14 after it's been used
this way. The value used in the header in lisp and kernel code is
loaded from PC-relative memory, which means that we no longer use
fmsr/fmdrr or similar instructions.

When starting a lisp thread or entering one via a callback, initialize
d7.

This all basically means that we can get 0.0[d|s]0 into an FPR (or
exploit the fact that it's already in one) a bit easier, and that's
generally a good thing. It's an ABI change, which means that the
FASL and image versions (for the ARM port only) changed; new binaries
are included in this commit.

The kernel changes to support the use of d7 are mostly pretty obvious.
In working on them, I noticed that "local labels" and "macro labels"
were in the same namespace, and we were only avoiding conflicts by
accident. For 10 years or so. (I also noticed that GAS doesn't fully
support PC-relative operands, so did that by hand.)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/arm-spentry.s

    r15093 r15111  
    31293129        __(stmdb sp!,{imm0,imm2})
    31303130        __(push_foreign_fprs())
     3131        __(adr imm0,1f)
     3132        __(fldd double_float_zero,[imm0])
    31313133        __(mov arg_x,#0)
    31323134        __(mov temp0,#0)
     
    31563158        __(add sp,sp,#4*node_size)
    31573159        __(bx lr)
    3158        
     3160        .align 3
     31611:     
     3162        .long 0
     3163        .long 0       
     3164                       
    31593165/*  EOF, basically  */
    31603166       
     
    43964402        __(stmdb sp!,{imm0,imm2})
    43974403        __(push_foreign_fprs())
     4404        __(adr imm0,1f)
     4405        __(fldd double_float_zero,[imm0])
    43984406        __(mov imm0,#TCR_STATE_LISP)
    43994407        __(str imm0,[rcontext,#tcr.valence])
     
    44104418        __(ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr})
    44114419        __(bx lr)
    4412 
     4420        .align 3
     44211:
     4422        .long 0
     4423        .long 0
     4424        .ltorg
    44134425        .data
    44144426        .global C(sptab)
Note: See TracChangeset for help on using the changeset viewer.