Annotation of researchv9/sys/sun3/setjmp.s, revision 1.1.1.1

1.1       root        1:        .data
                      2:        .asciz  "@(#)setjmp.s 1.1 86/02/03 Copyr 1984 Sun Micro"
                      3:        .even
                      4:        .text
                      5: 
                      6: |      Copyright (c) 1984 by Sun Microsystems, Inc.
                      7: 
                      8: #include "../machine/asm_linkage.h"
                      9: 
                     10: | Longjmp and setjmp implement non-local gotos
                     11: | using state vectors of type label_t (13 longs).
                     12: | Registers saved are the PC, d2-d7, and a2-a7.
                     13: SAVREGS = 0xFCFC
                     14: 
                     15:        ENTRY(setjmp)
                     16:        movl    sp@(4),a1               | get label_t address
                     17:        moveml  #SAVREGS,a1@(4)         | save data/address regs
                     18:        movl    sp@,a1@                 | save PC of caller
                     19:        clrl    d0                      | return zero
                     20:        rts
                     21: 
                     22:        ENTRY(longjmp)
                     23:        movl    sp@(4),a1               | get label_t address
                     24:        moveml  a1@(4),#SAVREGS         | restore data/address regs
                     25: | Note: we just changed stacks
                     26:        movl    a1@,sp@                 | restore PC
                     27:        movl    #1,d0                   | return one
                     28:        rts     
                     29: 
                     30: | syscall_setjmp just saves a6 and sp
                     31: | it is called from syscall, where speed is important
                     32: 
                     33:        ENTRY(syscall_setjmp)
                     34:        movl    sp@(4),a1               | get label_t address
                     35:        movl    a6,a1@(4+(10*4))        | save a6
                     36:        movl    sp,a1@(4+(11*4))        | save sp
                     37:        movl    sp@,a1@                 | save PC of caller
                     38:        clrl    d0                      | return zero
                     39:        rts

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.