The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/alphapc/l.s

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #include "mem.h"
    2 #include "osf1pal.h"
    3 
    4 #define SP      R30
    5 
    6 #define HI_IPL  6                       /* use 7 to disable mchecks */
    7 
    8 TEXT    _main(SB), $-8
    9         MOVQ    $setSB(SB), R29
   10         MOVQ    R29, R16
   11         CALL_PAL $PALwrkgp
   12         MOVQ    $mach0(SB), R(MACH)
   13         MOVQ    $(BY2PG-8)(R(MACH)), R30
   14         MOVQ    R31, R(USER)
   15         MOVQ    R31, 0(R(MACH))
   16 
   17         MOVQ    $edata(SB), R1
   18         MOVQ    $end(SB), R2
   19 clrbss:
   20         MOVQ    R31, (R1)
   21         ADDQ    $8, R1
   22         CMPUGT  R1, R2, R3
   23         BEQ     R3, clrbss
   24 
   25         MOVL    R0, bootconf(SB)        /* passed in from boot loader */
   26 
   27 _fpinit:
   28         MOVQ    $1, R16
   29         CALL_PAL $PALwrfen
   30 
   31         MOVQ    initfpcr(SB), R1        /* MOVQ $0x2800800000000000, R1 */
   32         MOVQ    R1, (R30)
   33         MOVT    (R30), F1
   34         MOVT    F1, FPCR
   35 
   36         MOVT    $0.5, F28
   37         ADDT    F28, F28, F29
   38         ADDT    F29, F29, F30
   39 
   40         MOVT    F31, F1
   41         MOVT    F31, F2
   42         MOVT    F31, F3
   43         MOVT    F31, F4
   44         MOVT    F31, F5
   45         MOVT    F31, F6
   46         MOVT    F31, F7
   47         MOVT    F31, F8
   48         MOVT    F31, F9
   49         MOVT    F31, F10
   50         MOVT    F31, F11
   51         MOVT    F31, F12
   52         MOVT    F31, F13
   53         MOVT    F31, F14
   54         MOVT    F31, F15
   55         MOVT    F31, F16
   56         MOVT    F31, F17
   57         MOVT    F31, F18
   58         MOVT    F31, F19
   59         MOVT    F31, F20
   60         MOVT    F31, F21
   61         MOVT    F31, F22
   62         MOVT    F31, F23
   63         MOVT    F31, F24
   64         MOVT    F31, F25
   65         MOVT    F31, F26
   66         MOVT    F31, F27
   67 
   68         JSR     main(SB)
   69         MOVQ    $_divq(SB), R31         /* touch _divq etc.; doesn't need to execute */
   70         MOVQ    $_divl(SB), R31         /* touch _divl etc.; doesn't need to execute */
   71         RET
   72 
   73 TEXT    setpcb(SB), $-8
   74         MOVQ    R30, (R0)
   75         AND     $0x7FFFFFFF, R0, R16    /* make address physical */
   76         CALL_PAL $PALswpctx
   77         RET
   78 
   79 GLOBL   mach0(SB), $(MAXMACH*BY2PG)
   80 GLOBL   init_ptbr(SB), $8
   81 
   82 TEXT    firmware(SB), $-8
   83         CALL_PAL $PALhalt
   84 
   85 TEXT    xxfirmware(SB), $-8
   86         CALL_PAL $PALhalt
   87 
   88 TEXT    splhi(SB), $0
   89 
   90         MOVL    R26, 4(R(MACH))         /* save PC in m->splpc */
   91         MOVQ    $HI_IPL, R16
   92         CALL_PAL $PALswpipl
   93         RET
   94 
   95 TEXT    spllo(SB), $0
   96         MOVQ    R31, R16
   97         CALL_PAL $PALswpipl
   98         RET
   99 
  100 TEXT    splx(SB), $0
  101         MOVL    R26, 4(R(MACH))         /* save PC in m->splpc */
  102 
  103 TEXT splxpc(SB), $0                     /* for iunlock */
  104         MOVQ    R0, R16
  105         CALL_PAL $PALswpipl
  106         RET
  107 
  108 TEXT    spldone(SB), $0
  109         RET
  110 
  111 TEXT    islo(SB), $0
  112         CALL_PAL $PALrdps
  113         AND     $IPL, R0
  114         XOR     $HI_IPL, R0
  115         RET
  116 
  117 TEXT    mb(SB), $-8
  118         MB
  119         RET
  120 
  121 TEXT    icflush(SB), $-8
  122         CALL_PAL $PALimb
  123         RET
  124 
  125 TEXT    tlbflush(SB), $-8
  126         MOVQ    R0, R16
  127         MOVL    4(FP), R17
  128         CALL_PAL $PALtbi
  129         RET
  130 
  131 TEXT    swpctx(SB), $-8
  132         MOVQ    R0, R16
  133         AND     $0x7FFFFFFF, R16        /* make address physical */
  134         CALL_PAL $PALswpctx
  135         RET
  136 
  137 TEXT    wrent(SB), $-8
  138         MOVQ    R0, R17
  139         MOVL    4(FP), R16
  140         CALL_PAL $PALwrent
  141         RET
  142 
  143 TEXT    wrvptptr(SB), $-8
  144         MOVQ    R0, R16
  145         CALL_PAL $PALwrvptptr
  146         RET
  147 
  148 TEXT    cserve(SB), $-8
  149         MOVQ    R0, R16
  150         MOVL    4(FP), R17
  151         CALL_PAL $PALcserve
  152         RET
  153 
  154 TEXT    setlabel(SB), $-8
  155         MOVL    R30, 0(R0)
  156         MOVL    R26, 4(R0)
  157         MOVQ    $0, R0
  158         RET
  159 
  160 TEXT    gotolabel(SB), $-8
  161         MOVL    0(R0), R30
  162         MOVL    4(R0), R26
  163         MOVQ    $1, R0
  164         RET
  165 
  166 TEXT    tas(SB), $-8
  167         MOVQ    R0, R1                  /* l */
  168 tas1:
  169         MOVLL   (R1), R0                /* l->key */
  170         BNE     R0, tas2
  171         MOVQ    $1, R2
  172         MOVLC   R2, (R1)                /* l->key = 1 */
  173         BEQ     R2, tas1                /* write failed, try again? */
  174 tas2:
  175         RET
  176 
  177 TEXT    _xdec(SB), $-8
  178         MOVQ    R0, R1                  /* p */
  179 dec1:
  180         MOVLL   (R1), R0                /* *p */
  181         SUBL    $1, R0
  182         MOVQ    R0, R2
  183         MOVLC   R2, (R1)                /* --(*p) */
  184         BEQ     R2, dec1                /* write failed, retry */
  185         RET
  186 
  187 TEXT    _xinc(SB), $-8
  188         MOVQ    R0, R1                  /* p */
  189 inc1:
  190         MOVLL   (R1), R0                /* *p */
  191         ADDL    $1, R0
  192         MOVLC   R0, (R1)                /* (*p)++ */
  193         BEQ     R0, inc1                /* write failed, retry */
  194         RET
  195 
  196 TEXT    cmpswap(SB), $-8
  197         MOVQ    R0, R1  /* p */
  198         MOVL    old+4(FP), R2
  199         MOVL    new+8(FP), R3
  200         MOVLL   (R1), R0
  201         CMPEQ   R0, R2, R4
  202         BEQ     R4, fail        /* if R0 != [sic] R2, goto fail */
  203         MOVQ    R3, R0
  204         MOVLC   R0, (R1)
  205         RET
  206 fail:
  207         MOVL    $0, R0
  208         RET
  209         
  210 TEXT    fpenab(SB), $-8
  211         MOVQ    R0, R16
  212         CALL_PAL $PALwrfen
  213         RET
  214 
  215 TEXT rpcc(SB), $0
  216         MOVL    R0, R1
  217         MOVL    $0, R0
  218         WORD    $0x6000C000             /* RPCC R0 */
  219         BEQ     R1, _ret
  220         MOVQ    R0, (R1)
  221 _ret:
  222         RET
  223 
  224 /*
  225  *      Exception handlers.  The stack frame looks like this:
  226  *
  227  *      R30+0:  (unused) link reg storage (R26) (32 bits)
  228  *      R30+4:  padding for alignment (32 bits)
  229  *      R30+8:  trap()'s first arg storage (R0) (32 bits -- type Ureg*)
  230  *      R30+12: padding for alignment (32 bits)
  231  *      R30+16: first 31 fields of Ureg, saved here (31*64 bits)
  232  *      R30+264:        other 6 fields of Ureg, saved by PALcode (6*64 bits)
  233  *      R30+312:        previous value of KSP before trap
  234  */
  235 
  236 TEXT    arith(SB), $-8
  237         SUBQ    $(4*BY2WD+31*BY2V), R30
  238         MOVQ    R0, (4*BY2WD+4*BY2V)(R30)
  239         MOVQ    $1, R0
  240         JMP     trapcommon
  241 
  242 TEXT    illegal0(SB), $-8
  243         SUBQ    $(4*BY2WD+31*BY2V), R30
  244         MOVQ    R0, (4*BY2WD+4*BY2V)(R30)
  245         MOVQ    $2, R0
  246         JMP     trapcommon
  247 
  248 TEXT    fault0(SB), $-8
  249         SUBQ    $(4*BY2WD+31*BY2V), R30
  250         MOVQ    R0, (4*BY2WD+4*BY2V)(R30)
  251         MOVQ    $4, R0
  252         JMP     trapcommon
  253 
  254 TEXT    unaligned(SB), $-8
  255         SUBQ    $(4*BY2WD+31*BY2V), R30
  256         MOVQ    R0, (4*BY2WD+4*BY2V)(R30)
  257         MOVQ    $6, R0
  258         JMP     trapcommon
  259 
  260 TEXT    intr0(SB), $-8
  261         SUBQ    $(4*BY2WD+31*BY2V), R30
  262         MOVQ    R0, (4*BY2WD+4*BY2V)(R30)
  263         MOVQ    $3, R0
  264 
  265 trapcommon:
  266         MOVQ    R0, (4*BY2WD+0*BY2V)(R30)
  267         MOVQ    R16, (4*BY2WD+1*BY2V)(R30)
  268         MOVQ    R17, (4*BY2WD+2*BY2V)(R30)
  269         MOVQ    R18, (4*BY2WD+3*BY2V)(R30)
  270 
  271         /* R0 already saved, (4*BY2WD+4*BY2V)(R30) */
  272         MOVQ    R1, (4*BY2WD+5*BY2V)(R30)
  273         MOVQ    R2, (4*BY2WD+6*BY2V)(R30)
  274         MOVQ    R3, (4*BY2WD+7*BY2V)(R30)
  275         MOVQ    R4, (4*BY2WD+8*BY2V)(R30)
  276         MOVQ    R5, (4*BY2WD+9*BY2V)(R30)
  277         MOVQ    R6, (4*BY2WD+10*BY2V)(R30)
  278         MOVQ    R7, (4*BY2WD+11*BY2V)(R30)
  279         MOVQ    R8, (4*BY2WD+12*BY2V)(R30)
  280         MOVQ    R9, (4*BY2WD+13*BY2V)(R30)
  281         MOVQ    R10, (4*BY2WD+14*BY2V)(R30)
  282         MOVQ    R11, (4*BY2WD+15*BY2V)(R30)
  283         MOVQ    R12, (4*BY2WD+16*BY2V)(R30)
  284         MOVQ    R13, (4*BY2WD+17*BY2V)(R30)
  285         MOVQ    R14, (4*BY2WD+18*BY2V)(R30)
  286         MOVQ    R15, (4*BY2WD+19*BY2V)(R30)
  287         MOVQ    R19, (4*BY2WD+20*BY2V)(R30)
  288         MOVQ    R20, (4*BY2WD+21*BY2V)(R30)
  289         MOVQ    R21, (4*BY2WD+22*BY2V)(R30)
  290         MOVQ    R22, (4*BY2WD+23*BY2V)(R30)
  291         MOVQ    R23, (4*BY2WD+24*BY2V)(R30)
  292         MOVQ    R24, (4*BY2WD+25*BY2V)(R30)
  293         MOVQ    R25, (4*BY2WD+26*BY2V)(R30)
  294         MOVQ    R26, (4*BY2WD+27*BY2V)(R30)
  295         MOVQ    R27, (4*BY2WD+28*BY2V)(R30)
  296         MOVQ    R28, (4*BY2WD+29*BY2V)(R30)
  297 
  298         MOVQ    $HI_IPL, R16
  299         CALL_PAL $PALswpipl
  300 
  301         CALL_PAL $PALrdusp
  302         MOVQ    R0, (4*BY2WD+30*BY2V)(R30)      /* save USP */
  303 
  304         MOVQ    $mach0(SB), R(MACH)
  305         MOVQ    $(4*BY2WD)(R30), R0
  306         JSR     trap(SB)
  307 trapret:
  308         MOVQ    (4*BY2WD+30*BY2V)(R30), R16     /* USP */
  309         CALL_PAL $PALwrusp                      /* ... */
  310         MOVQ    (4*BY2WD+4*BY2V)(R30), R0
  311         MOVQ    (4*BY2WD+5*BY2V)(R30), R1
  312         MOVQ    (4*BY2WD+6*BY2V)(R30), R2
  313         MOVQ    (4*BY2WD+7*BY2V)(R30), R3
  314         MOVQ    (4*BY2WD+8*BY2V)(R30), R4
  315         MOVQ    (4*BY2WD+9*BY2V)(R30), R5
  316         MOVQ    (4*BY2WD+10*BY2V)(R30), R6
  317         MOVQ    (4*BY2WD+11*BY2V)(R30), R7
  318         MOVQ    (4*BY2WD+12*BY2V)(R30), R8
  319         MOVQ    (4*BY2WD+13*BY2V)(R30), R9
  320         MOVQ    (4*BY2WD+14*BY2V)(R30), R10
  321         MOVQ    (4*BY2WD+15*BY2V)(R30), R11
  322         MOVQ    (4*BY2WD+16*BY2V)(R30), R12
  323         MOVQ    (4*BY2WD+17*BY2V)(R30), R13
  324         MOVQ    (4*BY2WD+18*BY2V)(R30), R14
  325         MOVQ    (4*BY2WD+19*BY2V)(R30), R15
  326         MOVQ    (4*BY2WD+20*BY2V)(R30), R19
  327         MOVQ    (4*BY2WD+21*BY2V)(R30), R20
  328         MOVQ    (4*BY2WD+22*BY2V)(R30), R21
  329         MOVQ    (4*BY2WD+23*BY2V)(R30), R22
  330         MOVQ    (4*BY2WD+24*BY2V)(R30), R23
  331         MOVQ    (4*BY2WD+25*BY2V)(R30), R24
  332         MOVQ    (4*BY2WD+26*BY2V)(R30), R25
  333         MOVQ    (4*BY2WD+27*BY2V)(R30), R26
  334         MOVQ    (4*BY2WD+28*BY2V)(R30), R27
  335         MOVQ    (4*BY2WD+29*BY2V)(R30), R28
  336         /* USP already restored from (4*BY2WD+30*BY2V)(R30) */
  337         ADDQ    $(4*BY2WD+31*BY2V), R30
  338         CALL_PAL $PALrti
  339 
  340 TEXT    forkret(SB), $0
  341         MOVQ    R31, R0                         /* Fake out system call return */
  342         JMP     systrapret
  343 
  344 TEXT    syscall0(SB), $-8
  345         SUBQ    $(4*BY2WD+31*BY2V), R30
  346         MOVQ    R0, (4*BY2WD+4*BY2V)(R30)       /* save scallnr in R0 */
  347         MOVQ    $HI_IPL, R16
  348         CALL_PAL $PALswpipl
  349         MOVQ    $mach0(SB), R(MACH)
  350         CALL_PAL $PALrdusp
  351         MOVQ    R0, (4*BY2WD+30*BY2V)(R30)      /* save USP */
  352         MOVQ    R26, (4*BY2WD+27*BY2V)(R30)     /* save last return address */
  353         MOVQ    $(4*BY2WD)(R30), R0             /* pass address of Ureg */
  354         JSR     syscall(SB)
  355 systrapret:
  356         MOVQ    (4*BY2WD+30*BY2V)(R30), R16     /* USP */
  357         CALL_PAL $PALwrusp                      /* consider doing this in execregs... */
  358         MOVQ    (4*BY2WD+27*BY2V)(R30), R26     /* restore last return address */
  359         ADDQ    $(4*BY2WD+31*BY2V), R30
  360         CALL_PAL $PALretsys
  361 
  362 /*
  363  * Take first processor into user mode
  364  *      - argument is stack pointer to user
  365  */
  366 
  367 TEXT    touser(SB), $-8
  368         MOVQ    R0, R16
  369         CALL_PAL $PALwrusp                      /* set USP to value passed */
  370         SUBQ    $(6*BY2V), R30                  /* create frame for retsys */
  371         MOVQ    $(UTZERO+32), R26               /* header appears in text */
  372         MOVQ    R26, (1*BY2V)(R30)              /* PC -- only reg that matters */
  373         CALL_PAL $PALretsys
  374 
  375 TEXT    rfnote(SB), $0
  376         SUBL    $(2*BY2WD), R0, SP
  377         JMP     trapret
  378 
  379 TEXT    savefpregs(SB), $-8
  380         MOVT    F0, 0x00(R0)
  381         MOVT    F1, 0x08(R0)
  382         MOVT    F2, 0x10(R0)
  383         MOVT    F3, 0x18(R0)
  384         MOVT    F4, 0x20(R0)
  385         MOVT    F5, 0x28(R0)
  386         MOVT    F6, 0x30(R0)
  387         MOVT    F7, 0x38(R0)
  388         MOVT    F8, 0x40(R0)
  389         MOVT    F9, 0x48(R0)
  390         MOVT    F10, 0x50(R0)
  391         MOVT    F11, 0x58(R0)
  392         MOVT    F12, 0x60(R0)
  393         MOVT    F13, 0x68(R0)
  394         MOVT    F14, 0x70(R0)
  395         MOVT    F15, 0x78(R0)
  396         MOVT    F16, 0x80(R0)
  397         MOVT    F17, 0x88(R0)
  398         MOVT    F18, 0x90(R0)
  399         MOVT    F19, 0x98(R0)
  400         MOVT    F20, 0xA0(R0)
  401         MOVT    F21, 0xA8(R0)
  402         MOVT    F22, 0xB0(R0)
  403         MOVT    F23, 0xB8(R0)
  404         MOVT    F24, 0xC0(R0)
  405         MOVT    F25, 0xC8(R0)
  406         MOVT    F26, 0xD0(R0)
  407         MOVT    F27, 0xD8(R0)
  408         MOVT    F28, 0xE0(R0)
  409         MOVT    F29, 0xE8(R0)
  410         MOVT    F30, 0xF0(R0)
  411         MOVT    F31, 0xF8(R0)
  412         MOVT    FPCR, F0
  413         MOVT    F0, 0x100(R0)
  414 
  415         MOVQ    $0, R16
  416         CALL_PAL $PALwrfen              /* disable */
  417         RET
  418 
  419 TEXT    restfpregs(SB), $-8
  420         MOVQ    $1, R16
  421         CALL_PAL $PALwrfen              /* enable */
  422 
  423         MOVT    0x100(R0), F0
  424         MOVT    F0, FPCR
  425         MOVT    0x00(R0), F0
  426         MOVT    0x08(R0), F1
  427         MOVT    0x10(R0), F2
  428         MOVT    0x18(R0), F3
  429         MOVT    0x20(R0), F4
  430         MOVT    0x28(R0), F5
  431         MOVT    0x30(R0), F6
  432         MOVT    0x38(R0), F7
  433         MOVT    0x40(R0), F8
  434         MOVT    0x48(R0), F9
  435         MOVT    0x50(R0), F10
  436         MOVT    0x58(R0), F11
  437         MOVT    0x60(R0), F12
  438         MOVT    0x68(R0), F13
  439         MOVT    0x70(R0), F14
  440         MOVT    0x78(R0), F15
  441         MOVT    0x80(R0), F16
  442         MOVT    0x88(R0), F17
  443         MOVT    0x90(R0), F18
  444         MOVT    0x98(R0), F19
  445         MOVT    0xA0(R0), F20
  446         MOVT    0xA8(R0), F21
  447         MOVT    0xB0(R0), F22
  448         MOVT    0xB8(R0), F23
  449         MOVT    0xC0(R0), F24
  450         MOVT    0xC8(R0), F25
  451         MOVT    0xD0(R0), F26
  452         MOVT    0xD8(R0), F27
  453         MOVT    0xE0(R0), F28
  454         MOVT    0xE8(R0), F29
  455         MOVT    0xF0(R0), F30
  456         MOVT    0xF8(R0), F31
  457         RET

Cache object: 42e824c61e1575d814864e9c252d7f3b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.