NOVA User-Level Environment
Version testbox/changed-memory-timing-317-g320d8b5
|
Instruction helper. More...
Classes | |
struct | Descriptor |
Macros | |
#define | MOVE2(operand_size, DST, SRC) |
#define | helper_LOOPS(NAME, X) |
#define | helper_LDT(NAME, VAR, MTD) |
#define | helper_SDT(NAME, VAR, MTD) |
#define | NCHECK(X) { if (X) break; } |
#define | FEATURE(X, Y) { if (feature & (X)) Y; } |
#define | MOVE2(operand_size, DST, SRC) |
Move. | |
#define | helper_LOOPS(NAME, X) |
#define | helper_LDT(NAME, VAR, MTD) |
#define | helper_SDT(NAME, VAR, MTD) |
#define | NCHECK(X) { if (X) break; } |
#define | FEATURE(X, Y) { if (feature & (X)) Y; } |
Functions | |
int | cpl0_test () |
Check whether CPL0 is required. | |
int | handle_segment (CpuState::Descriptor *desc, unsigned &virt, unsigned length, bool write, bool stackop) |
Add base and check segment type and limit. | |
template<unsigned operand_size> | |
int | logical_mem (CpuState::Descriptor *desc, unsigned virt, bool write, void *&res, bool stackop=false) |
template<unsigned operand_size> | |
int | helper_JMP_absolute (unsigned nrip) |
Perform an absolute JMP. | |
template<unsigned feature, unsigned operand_size> | |
int | __attribute__ ((regparm(3))) string_helper() |
int | helper_MOV__CR0__EDX () |
Move from control register. | |
int | helper_MOV__EDX__CR0 () |
Move to control register. | |
int | helper_LMSW (unsigned short value) |
int | desc_get_base (unsigned short selector, unsigned long &base, bool ext) |
int | load_gdt_descriptor (Descriptor &desc, unsigned short selector, bool ext) |
int | load_idt_descriptor (Descriptor &desc, unsigned event) |
int | desc_set_flag (Descriptor &desc, unsigned short selector, unsigned char flag, bool ext) |
int | helper_LTR (unsigned short selector) |
int | helper_LLDT (unsigned short selector) |
int | set_segment (CpuState::Descriptor *seg, unsigned short sel, bool cplcheck=true) |
int | helper_far_jmp (unsigned tmp_cs, unsigned tmp_eip, unsigned tmp_flag) |
template<unsigned operand_size, bool lcall> | |
int | helper_lcall (void *tmp_src) |
template<unsigned operand_size> | |
int | helper_LJMP (void *tmp_src) |
template<unsigned operand_size> | |
int | helper_LCALL (void *tmp_src) |
template<unsigned operand_size> | |
int | helper_IRET () |
int | idt_traversal (unsigned event, unsigned error_code) |
int | helper_INT (unsigned char vector) |
int | helper_INVLPG () |
int | helper_FWAIT () |
int | helper_MOV__DB0__EDX () |
int | helper_MOV__EDX__DB0 () |
int | helper_FXSAVE () |
fxsave. | |
int | helper_FRSTOR () |
void | helper_AAM (unsigned char imm) |
void | helper_AAD (unsigned char imm) |
void | helper_XLAT () |
template<unsigned operand_size> | |
void | helper_ENTER (unsigned *imm) |
Instruction helper.
Copyright (C) 2009-2010, Bernhard Kauer bk@vm Economic rights: Technische Universitaet Dresden (Germany) mon. org
This file is part of Vancouver.
Vancouver is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.
Vancouver is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 2 for more details.
#define FEATURE | ( | X, | |
Y | |||
) | { if (feature & (X)) Y; } |
#define FEATURE | ( | X, | |
Y | |||
) | { if (feature & (X)) Y; } |
#define helper_LDT | ( | NAME, | |
VAR, | |||
MTD | |||
) |
#define helper_LDT | ( | NAME, | |
VAR, | |||
MTD | |||
) |
#define helper_LOOPS | ( | NAME, | |
X | |||
) |
#define helper_LOOPS | ( | NAME, | |
X | |||
) |
#define helper_SDT | ( | NAME, | |
VAR, | |||
MTD | |||
) |
#define helper_SDT | ( | NAME, | |
VAR, | |||
MTD | |||
) |
#define MOVE2 | ( | operand_size, | |
DST, | |||
SRC | |||
) |
#define MOVE2 | ( | operand_size, | |
DST, | |||
SRC | |||
) |
Move.
#define NCHECK | ( | X | ) | { if (X) break; } |
#define NCHECK | ( | X | ) | { if (X) break; } |
int __attribute__ | ( | (regparm(3)) | ) |
int cpl0_test | ( | ) |
Check whether CPL0 is required.
int desc_get_base | ( | unsigned short | selector, |
unsigned long & | base, | ||
bool | ext | ||
) |
int desc_set_flag | ( | Descriptor & | desc, |
unsigned short | selector, | ||
unsigned char | flag, | ||
bool | ext | ||
) |
int handle_segment | ( | CpuState::Descriptor * | desc, |
unsigned & | virt, | ||
unsigned | length, | ||
bool | write, | ||
bool | stackop | ||
) |
Add base and check segment type and limit.
void helper_AAD | ( | unsigned char | imm | ) |
void helper_AAM | ( | unsigned char | imm | ) |
void helper_ENTER | ( | unsigned * | imm | ) |
int helper_far_jmp | ( | unsigned | tmp_cs, |
unsigned | tmp_eip, | ||
unsigned | tmp_flag | ||
) |
int helper_FRSTOR | ( | ) |
int helper_FWAIT | ( | ) |
int helper_FXSAVE | ( | ) |
fxsave.
Missing: #AC for unaligned access
int helper_INT | ( | unsigned char | vector | ) |
int helper_INVLPG | ( | ) |
int helper_IRET | ( | ) |
int helper_JMP_absolute | ( | unsigned | nrip | ) |
Perform an absolute JMP.
int helper_lcall | ( | void * | tmp_src | ) |
int helper_LCALL | ( | void * | tmp_src | ) |
int helper_LJMP | ( | void * | tmp_src | ) |
int helper_LLDT | ( | unsigned short | selector | ) |
int helper_LMSW | ( | unsigned short | value | ) |
int helper_LTR | ( | unsigned short | selector | ) |
int helper_MOV__CR0__EDX | ( | ) |
Move from control register.
int helper_MOV__DB0__EDX | ( | ) |
int helper_MOV__EDX__CR0 | ( | ) |
Move to control register.
int helper_MOV__EDX__DB0 | ( | ) |
void helper_XLAT | ( | ) |
int idt_traversal | ( | unsigned | event, |
unsigned | error_code | ||
) |
int load_gdt_descriptor | ( | Descriptor & | desc, |
unsigned short | selector, | ||
bool | ext | ||
) |
int load_idt_descriptor | ( | Descriptor & | desc, |
unsigned | event | ||
) |
int logical_mem | ( | CpuState::Descriptor * | desc, |
unsigned | virt, | ||
bool | write, | ||
void *& | res, | ||
bool | stackop = false |
||
) |
int set_segment | ( | CpuState::Descriptor * | seg, |
unsigned short | sel, | ||
bool | cplcheck = true |
||
) |