[BACK]Return to alpha_mach_dep.s CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / gc5.3

Annotation of OpenXM_contrib2/asir2000/gc5.3/alpha_mach_dep.s, Revision 1.1

1.1     ! noro        1:  # $Id: alpha_mach_dep.s,v 1.2 1993/01/18 22:54:51 dosser Exp $
        !             2:
        !             3: # This is BROKEN on a 21264 running gcc, and probably in other cases.
        !             4: # The compiler may spill pointers to fp registers, and this code doesn't
        !             5: # scan those.
        !             6:
        !             7: # define call_push(x)                                                  \
        !             8:        lda   $16, 0(x);        /* copy x to first argument register */ \
        !             9:        jsr   $26, GC_push_one; /* call GC_push_one, ret addr in $26 */ \
        !            10:        ldgp  $gp, 0($26)       /* restore $gp register from $ra */
        !            11:
        !            12:         .text
        !            13:         .align  4
        !            14:         .globl  GC_push_regs
        !            15:         .ent    GC_push_regs 2
        !            16: GC_push_regs:
        !            17:        ldgp    $gp, 0($27)             # set gp from the procedure value reg
        !            18:        lda     $sp, -32($sp)           # make stack frame
        !            19:        stq     $26, 8($sp)             # save return address
        !            20:         .mask   0x04000000, -8
        !            21:         .frame  $sp, 16, $26, 0
        !            22:
        !            23:  #      call_push($0)    # expression eval and int func result
        !            24:
        !            25:  #      call_push($1)    # temp regs - not preserved cross calls
        !            26:  #      call_push($2)
        !            27:  #      call_push($3)
        !            28:  #      call_push($4)
        !            29:  #      call_push($5)
        !            30:  #      call_push($6)
        !            31:  #      call_push($7)
        !            32:  #      call_push($8)
        !            33:
        !            34:         call_push($9)    # Saved regs
        !            35:         call_push($10)
        !            36:         call_push($11)
        !            37:         call_push($12)
        !            38:         call_push($13)
        !            39:         call_push($14)
        !            40:
        !            41:         call_push($15)   # frame ptr or saved reg
        !            42:
        !            43:  #      call_push($16)   # argument regs - not preserved cross calls
        !            44:  #      call_push($17)
        !            45:  #      call_push($18)
        !            46:  #      call_push($19)
        !            47:  #      call_push($20)
        !            48:  #      call_push($21)
        !            49:
        !            50:  #      call_push($22)   # temp regs - not preserved cross calls
        !            51:  #      call_push($23)
        !            52:  #      call_push($24)
        !            53:  #      call_push($25)
        !            54:
        !            55:  #      call_push($26)   # return address - expression eval
        !            56:  #      call_push($27)   # procedure value or temporary reg
        !            57:  #      call_push($28)   # assembler temp - not presrved
        !            58:         call_push($29)   # Global Pointer
        !            59:  #      call_push($30)   # Stack Pointer
        !            60:
        !            61:        ldq     $26, 8($sp)             # restore return address
        !            62:        lda     $sp, 32($sp)            # pop stack frame
        !            63:        ret     $31, ($26), 1           # return ($31 == hardwired zero)
        !            64:        .end    GC_push_regs

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>