Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
104d3497
提交
104d3497
12月 03, 2011
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
x86-64 bits and instructions for performance counters.
上级
1b204a5b
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
63 行增加
和
2 行删除
+63
-2
amd64.h
amd64.h
+43
-2
bits.h
bits.h
+20
-0
没有找到文件。
amd64.h
浏览文件 @
104d3497
#pragma once
// Routines to let C code use special x86 instructions.
static
inline
void
cpuid
(
u32
info
,
u32
*
eaxp
,
u32
*
ebxp
,
u32
*
ecxp
,
u32
*
edxp
)
{
u32
eax
,
ebx
,
ecx
,
edx
;
__asm
volatile
(
"cpuid"
:
"=a"
(
eax
),
"=b"
(
ebx
),
"=c"
(
ecx
),
"=d"
(
edx
)
:
"a"
(
info
));
if
(
eaxp
)
*
eaxp
=
eax
;
if
(
ebxp
)
*
ebxp
=
ebx
;
if
(
ecxp
)
*
ecxp
=
ecx
;
if
(
edxp
)
*
edxp
=
edx
;
}
static
inline
u8
inb
(
u16
port
)
{
...
...
@@ -127,14 +145,23 @@ writemsr(u32 msr, u64 val)
__asm
volatile
(
"wrmsr"
:
:
"c"
(
msr
),
"a"
(
lo
),
"d"
(
hi
));
}
static
inline
u64
rdtsc
(
void
)
static
inline
u64
rdtsc
(
void
)
{
u32
hi
,
lo
;
__asm
volatile
(
"rdtsc"
:
"=a"
(
lo
),
"=d"
(
hi
));
return
((
u64
)
lo
)
|
(((
u64
)
hi
)
<<
32
);
}
static
inline
u64
rdpmc
(
u32
ecx
)
{
u32
hi
,
lo
;
__asm
volatile
(
"rdpmc"
:
"=a"
(
lo
),
"=d"
(
hi
)
:
"c"
(
ecx
));
return
((
u64
)
lo
)
|
(((
u64
)
hi
)
<<
32
);
}
static
inline
void
hlt
(
void
)
{
...
...
@@ -150,6 +177,20 @@ rrsp(void)
}
static
inline
void
lcr4
(
u64
val
)
{
__asm
volatile
(
"movq %0,%%cr4"
:
:
"r"
(
val
));
}
static
inline
u64
rcr4
(
void
)
{
u64
val
;
__asm
volatile
(
"movq %%cr4,%0"
:
"=r"
(
val
));
return
val
;
}
static
inline
void
lcr3
(
u64
val
)
{
__asm
volatile
(
"movq %0,%%cr3"
:
:
"r"
(
val
));
...
...
bits.h
浏览文件 @
104d3497
...
...
@@ -39,6 +39,8 @@
#define CR0_CD 0x40000000 // Cache Disable
#define CR0_PG 0x80000000 // Paging
#define CR4_PCE 0x100 // RDPMC at CPL > 0
// FS/GS base registers
#define MSR_FS_BASE 0xc0000100
#define MSR_GS_BASE 0xc0000101
...
...
@@ -48,3 +50,21 @@
#define MSR_LSTAR 0xc0000082
#define MSR_CSTAR 0xc0000083
#define MSR_SFMASK 0xc0000084
// AMD performance event-select registers
#define MSR_AMD_PERF_SEL0 0xC0010000
#define MSR_AMD_PERF_SEL1 0xC0010001
#define MSR_AMD_PERF_SEL2 0xC0010002
#define MSR_AMD_PERF_SEL3 0xC0010003
// AMD performance event-count registers
#define MSR_AMD_PERF_CNT0 0xC0010004
#define MSR_AMD_PERF_CNT1 0xC0010005
#define MSR_AMD_PERF_CNT2 0xC0010006
#define MSR_AMD_PERF_CNT3 0xC0010007
// Intel performance event-select registers
#define MSR_INTEL_PERF_SEL0 0x00000186
#define MSR_INTEL_PERF_SEL1 0x00000187
// Intel performance event-count registers
#define MSR_INTEL_PERF_CNT0 0x000000c1
#define MSR_INTEL_PERF_CNT1 0x000000c2
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论