add rdtsc for x86

This commit is contained in:
Yanyan Jiang 2017-04-21 12:50:01 -04:00
parent e453de93ac
commit c684832d80
7 changed files with 73 additions and 2 deletions

View File

@ -1,6 +1,8 @@
#ifndef __TYPES_H__
#define __TYPES_H__
#include <unistd.h>
typedef char i8;
typedef unsigned char u8;
typedef short int i16;

View File

@ -12,8 +12,16 @@ ulong _uptime() {
return seconds * 1000 + (useconds + 500) / 1000;
}
static inline long long rdtsc() {
int lo, hi;
asm volatile ("rdtscp": "=a"(lo), "=d"(hi) : : "%ecx");
return ((long long)hi << 32) | lo;
}
static long long init_tsc;
ulong _cycles() {
return 0;
return rdtsc() - init_tsc;
}
void gui_init();
@ -21,5 +29,6 @@ void gui_init();
void _ioe_init() {
gui_init();
gettimeofday(&boot_time, NULL);
init_tsc = rdtsc();
}

View File

@ -110,14 +110,27 @@ int _peek_key() {
}
}
static inline long long rdtsc() {
int lo, hi;
asm volatile ("rdtscp": "=a"(lo), "=d"(hi) : : "%ecx");
return ((long long)hi << 32) | lo;
}
static long long init_tsc;
void _ioe_init() {
vga_init();
init_tsc = rdtsc();
}
ulong i386_uptime = 0;
ulong _cycles() {
return rdtsc() - init_tsc;
}
ulong _uptime() {
return i386_uptime ++;
return i386_uptime;
}
_Screen _screen;

5
apps/tsc/README.md Normal file
View File

@ -0,0 +1,5 @@
# Hello World
最简单的Hello World程序使用`_putc`打印一些字符,然后`_halt(0)`终止。
能够运行在任何实现了AM的平台上。

2
apps/tsc/include/hello.h Normal file
View File

@ -0,0 +1,2 @@
void print(const char *);
void printi(int);

18
apps/tsc/src/hello.c Normal file
View File

@ -0,0 +1,18 @@
#include <hello.h>
#include <am.h>
int main() {
_trm_init();
_ioe_init();
ulong t = _uptime();
for (int i = 0; i <= 10000; i ++) {
printi(_cycles());
print("\n");
}
printi(_uptime() - t);
print("ms\n");
_halt(0);
}

22
apps/tsc/src/print.c Normal file
View File

@ -0,0 +1,22 @@
#include <hello.h>
#include <am.h>
void print(const char *s) {
for (; *s; s ++) {
_putc(*s);
}
}
static void print_i(int i) {
if (i > 0) {
print_i(i / 10);
_putc('0' + (i % 10));
}
}
void printi(int i) {
if (i == 0) _putc('0');
else print_i(i);
}