OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [boehm-gc/] [sparc_mach_dep.S] - Rev 742

Go to most recent revision | Compare with Previous | Blame | View Log

!       SPARCompiler 3.0 and later apparently no longer handles
!       asm outside functions.  So we need a separate .s file
!       This is only set up for SunOS 5, not SunOS 4.
!       Assumes this is called before the stack contents are
!       examined.

        .seg    "text"
        .globl  GC_save_regs_in_stack
        .globl  GC_push_regs
GC_save_regs_in_stack:
GC_push_regs:
#if defined(__arch64__) || defined(__sparcv9)
        save    %sp,-128,%sp
        flushw
        ret
          restore %sp,2047+128,%o0
#else /* 32 bit SPARC */
        ta      0x3   ! ST_FLUSH_WINDOWS
        mov     %sp,%o0
        retl
        nop
#endif /* 32 bit SPARC */
.GC_save_regs_in_stack_end:
        .size GC_save_regs_in_stack,.GC_save_regs_in_stack_end-GC_save_regs_in_stack
        

        .globl  GC_clear_stack_inner
GC_clear_stack_inner:
#if defined(__arch64__) || defined(__sparcv9)
        mov %sp,%o2             ! Save sp
        add %sp,2047-8,%o3      ! p = sp+bias-8
        add %o1,-2047-192,%sp   ! Move sp out of the way,
                                ! so that traps still work.
                                ! Includes some extra words
                                ! so we can be sloppy below.
loop:
        stx %g0,[%o3]           ! *(long *)p = 0
        cmp %o3,%o1
        bgu,pt %xcc, loop       ! if (p > limit) goto loop
          add %o3,-8,%o3        ! p -= 8 (delay slot)
        retl
          mov %o2,%sp           ! Restore sp., delay slot       
#else  /* 32 bit SPARC */
        mov     %sp,%o2         ! Save sp
        add     %sp,-8,%o3      ! p = sp-8
        clr     %g1             ! [g0,g1] = 0
        add     %o1,-0x60,%sp   ! Move sp out of the way,
                                ! so that traps still work.
                                ! Includes some extra words
                                ! so we can be sloppy below.
loop:
        std     %g0,[%o3]       ! *(long long *)p = 0
        cmp     %o3,%o1
        bgu     loop            ! if (p > limit) goto loop
          add   %o3,-8,%o3      ! p -= 8 (delay slot)
        retl
          mov   %o2,%sp         ! Restore sp., delay slot
#endif  /* 32 bit SPARC */
.GC_clear_stack_inner_end:
        .size GC_clear_stack_inner,.GC_clear_stack_inner_end-GC_clear_stack_inner

        
                
                
                
                
        

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.