summaryrefslogtreecommitdiff
path: root/kernel/cpu/cpu.c
blob: df0b34f7d870328650f598208224c44b6c218599 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <lib.h>
#include <comus/cpu.h>

#include "fpu.h"
#include "pic.h"
#include "idt.h"

void cpu_init(void)
{
	pic_remap();
	idt_init();
	fpu_init();
}

void cpu_print_regs(struct cpu_regs *regs)
{
	kprintf("rax: %#016lx (%lu)\n", regs->rax, regs->rax);
	kprintf("rbx: %#016lx (%lu)\n", regs->rbx, regs->rbx);
	kprintf("rcx: %#016lx (%lu)\n", regs->rcx, regs->rcx);
	kprintf("rdx: %#016lx (%lu)\n", regs->rdx, regs->rdx);
	kprintf("rsi: %#016lx (%lu)\n", regs->rsi, regs->rsi);
	kprintf("rdi: %#016lx (%lu)\n", regs->rdi, regs->rdi);
	kprintf("rsp: %#016lx (%lu)\n", regs->rsp, regs->rsp);
	kprintf("rbp: %#016lx (%lu)\n", regs->rbp, regs->rbp);
	kprintf("r8 : %#016lx (%lu)\n", regs->r8, regs->r8);
	kprintf("r9 : %#016lx (%lu)\n", regs->r9, regs->r9);
	kprintf("r10: %#016lx (%lu)\n", regs->r10, regs->r10);
	kprintf("r11: %#016lx (%lu)\n", regs->r11, regs->r11);
	kprintf("r12: %#016lx (%lu)\n", regs->r12, regs->r12);
	kprintf("r13: %#016lx (%lu)\n", regs->r13, regs->r13);
	kprintf("r14: %#016lx (%lu)\n", regs->r14, regs->r14);
	kprintf("r15: %#016lx (%lu)\n", regs->r15, regs->r15);
	kprintf("rip: %#016lx (%lu)\n", regs->rip, regs->rip);
	kprintf("rflags: %#016lx (%lu)\n", (uint64_t)regs->rflags.raw,
			(uint64_t)regs->rflags.raw);
	kputs("rflags: ");
	if (regs->rflags.cf)
		kputs("CF ");
	if (regs->rflags.pf)
		kputs("PF ");
	if (regs->rflags.af)
		kputs("AF ");
	if (regs->rflags.zf)
		kputs("ZF ");
	if (regs->rflags.sf)
		kputs("SF ");
	if (regs->rflags.tf)
		kputs("TF ");
	if (regs->rflags.if_)
		kputs("IF ");
	if (regs->rflags.df)
		kputs("DF ");
	if (regs->rflags.of)
		kputs("OF ");
	if (regs->rflags.iopl)
		kputs("IOPL ");
	if (regs->rflags.nt)
		kputs("NT ");
	if (regs->rflags.md)
		kputs("MD ");
	if (regs->rflags.rf)
		kputs("RF ");
	if (regs->rflags.vm)
		kputs("VM ");
	if (regs->rflags.ac)
		kputs("AC ");
	if (regs->rflags.vif)
		kputs("VIF ");
	if (regs->rflags.vip)
		kputs("VIP ");
	if (regs->rflags.id)
		kputs("ID ");
	kputs("\n");
}