linux/arch/sparc/kernel/helpers.S
<<
>>
Prefs
   1        .align  32
   2        .globl  __flushw_user
   3        .type   __flushw_user,#function
   4__flushw_user:
   5        rdpr    %otherwin, %g1
   6        brz,pn  %g1, 2f
   7         clr    %g2
   81:      save    %sp, -128, %sp
   9        rdpr    %otherwin, %g1
  10        brnz,pt %g1, 1b
  11         add    %g2, 1, %g2
  121:      sub     %g2, 1, %g2
  13        brnz,pt %g2, 1b
  14         restore %g0, %g0, %g0
  152:      retl
  16         nop
  17        .size   __flushw_user,.-__flushw_user
  18
  19        /* Flush %fp and %i7 to the stack for all register
  20         * windows active inside of the cpu.  This allows
  21         * show_stack_trace() to avoid using an expensive
  22         * 'flushw'.
  23         */
  24        .globl          stack_trace_flush
  25        .type           stack_trace_flush,#function
  26stack_trace_flush:
  27        rdpr            %pstate, %o0
  28        wrpr            %o0, PSTATE_IE, %pstate
  29
  30        rdpr            %cwp, %g1
  31        rdpr            %canrestore, %g2
  32        sub             %g1, 1, %g3
  33
  341:      brz,pn          %g2, 2f
  35         sub            %g2, 1, %g2
  36        wrpr            %g3, %cwp
  37        stx             %fp, [%sp + STACK_BIAS + RW_V9_I6]
  38        stx             %i7, [%sp + STACK_BIAS + RW_V9_I7]
  39        ba,pt           %xcc, 1b
  40         sub            %g3, 1, %g3
  41
  422:      wrpr            %g1, %cwp
  43        wrpr            %o0, %pstate
  44
  45        retl
  46         nop
  47        .size           stack_trace_flush,.-stack_trace_flush
  48
  49#ifdef CONFIG_SMP
  50        .globl          hard_smp_processor_id
  51        .type           hard_smp_processor_id,#function
  52hard_smp_processor_id:
  53#endif
  54        .globl          real_hard_smp_processor_id
  55        .type           real_hard_smp_processor_id,#function
  56real_hard_smp_processor_id:
  57        __GET_CPUID(%o0)
  58        retl
  59         nop
  60#ifdef CONFIG_SMP
  61        .size           hard_smp_processor_id,.-hard_smp_processor_id
  62#endif
  63        .size           real_hard_smp_processor_id,.-real_hard_smp_processor_id
  64