diff options
Diffstat (limited to 'arch/ia64/kernel/head.S')
-rw-r--r-- | arch/ia64/kernel/head.S | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index d3a41d5f8d12..ddeab4e36fd5 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -1002,6 +1002,26 @@ GLOBAL_ENTRY(sched_clock) | |||
1002 | br.ret.sptk.many rp | 1002 | br.ret.sptk.many rp |
1003 | END(sched_clock) | 1003 | END(sched_clock) |
1004 | 1004 | ||
1005 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
1006 | GLOBAL_ENTRY(cycle_to_cputime) | ||
1007 | alloc r16=ar.pfs,1,0,0,0 | ||
1008 | addl r8=THIS_CPU(cpu_info) + IA64_CPUINFO_NSEC_PER_CYC_OFFSET,r0 | ||
1009 | ;; | ||
1010 | ldf8 f8=[r8] | ||
1011 | ;; | ||
1012 | setf.sig f9=r32 | ||
1013 | ;; | ||
1014 | xmpy.lu f10=f9,f8 // calculate low 64 bits of 128-bit product (4 cyc) | ||
1015 | xmpy.hu f11=f9,f8 // calculate high 64 bits of 128-bit product | ||
1016 | ;; | ||
1017 | getf.sig r8=f10 // (5 cyc) | ||
1018 | getf.sig r9=f11 | ||
1019 | ;; | ||
1020 | shrp r8=r9,r8,IA64_NSEC_PER_CYC_SHIFT | ||
1021 | br.ret.sptk.many rp | ||
1022 | END(cycle_to_cputime) | ||
1023 | #endif /* CONFIG_VIRT_CPU_ACCOUNTING */ | ||
1024 | |||
1005 | GLOBAL_ENTRY(start_kernel_thread) | 1025 | GLOBAL_ENTRY(start_kernel_thread) |
1006 | .prologue | 1026 | .prologue |
1007 | .save rp, r0 // this is the end of the call-chain | 1027 | .save rp, r0 // this is the end of the call-chain |