root/arch/alpha/kernel/head.S

/* [previous][next][first][last][top][bottom][index][help] */
   1 /*
   2  * alpha/boot/head.S
   3  *
   4  * initial boot stuff.. At this point, the bootloader has already
   5  * switched into OSF/1 PAL-code, and loaded us at the correct address
   6  * (START_ADDR).  So there isn't much left for us to do: just set up
   7  * the kernel global pointer and jump to the kernel entry-point.
   8  */
   9 
  10 #define __ASSEMBLY__
  11 #include <asm/system.h>
  12 
  13 #define halt .long PAL_halt
  14 
  15 .globl swapper_pg_dir
  16 .globl _stext
  17 swapper_pg_dir=SWAPPER_PGD
  18 
  19         .set noreorder
  20         .globl  __start
  21         .ent    __start
  22 _stext:
  23 __start:
  24         br      $27,1f
  25 1:      ldgp    $29,0($27)
  26         lda     $27,start_kernel
  27         jsr     $26,($27),start_kernel
  28         halt
  29         .end __start
  30 
  31         .align 3
  32         .globl  wrent
  33         .ent    wrent
  34 wrent:
  35         .long PAL_wrent
  36         ret     ($26)
  37         .end wrent
  38 
  39         .align 3
  40         .globl  wrkgp
  41         .ent    wrkgp
  42 wrkgp:
  43         .long PAL_wrkgp
  44         ret     ($26)
  45         .end wrkgp
  46 
  47         .align 3
  48         .globl  wrusp
  49         .ent    wrusp
  50 wrusp:
  51         .long PAL_wrusp
  52         ret     ($26)
  53         .end wrusp
  54 
  55         .align 3
  56         .globl  rdusp
  57         .ent    rdusp
  58 rdusp:
  59         .long PAL_rdusp
  60         ret     ($26)
  61         .end rdusp
  62 
  63         .align 3
  64         .globl  tbi
  65         .ent    tbi
  66 tbi:
  67         .long PAL_tbi
  68         ret     ($26)
  69         .end tbi
  70 
  71         .align 3
  72         .globl  imb
  73         .ent    imb
  74 imb:
  75         .long PAL_imb
  76         ret     ($26)
  77         .end imb
  78 
  79         .align 3
  80         .globl  rdmces
  81         .ent    rdmces
  82 rdmces:
  83         call_pal PAL_rdmces
  84         ret     ($26)
  85         .end rdmces
  86 
  87         .align 3
  88         .globl  wrmces
  89         .ent    wrmces
  90 wrmces:
  91         call_pal PAL_wrmces
  92         ret     ($26)
  93         .end wrmces
  94 
  95         #
  96         # The following two functions don't need trapb/excb instructions
  97         # around the mf_fpcr/mt_fpcr instructions because (a) the kernel
  98         # never generates arithmetic faults and (b) call_pal instructions
  99         # are implied trap barriers.
 100         #
 101         .align 3
 102         .globl  rdfpcr
 103         .ent    rdfpcr
 104 rdfpcr:
 105         lda     $30,-0x10($30)
 106         stt     $f0,0($30)
 107         mf_fpcr $f0
 108         stt     $f0,8($30)
 109         ldt     $f0,0($30)
 110         ldq     $0,8($30)
 111         lda     $30,0x10($30)
 112         ret     ($26)
 113         .end    rdfpcr
 114 
 115         .align 3
 116         .globl  wrfpcr
 117         .ent    wrfpcr
 118 wrfpcr:
 119         lda     $30,-0x10($30)
 120         stt     $f0,0($30)
 121         stq     $16,8($30)
 122         ldt     $f0,8($30)
 123         mt_fpcr $f0
 124         ldt     $f0,0($30)
 125         lda     $30,0x10($30)
 126         ret     ($26)
 127         .end    wrfpcr

/* [previous][next][first][last][top][bottom][index][help] */