diff --git a/repos/base/include/spec/x86/cpu/vm_state.h b/repos/base/include/spec/x86/cpu/vm_state.h
new file mode 100644
index 0000000000..1018b44ae4
--- /dev/null
+++ b/repos/base/include/spec/x86/cpu/vm_state.h
@@ -0,0 +1,146 @@
+/*
+ * \brief CPU context of a virtual machine for x86
+ * \author Alexander Boettcher
+ * \date 2018-10-09
+ */
+
+/*
+ * Copyright (C) 2018 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU Affero General Public License version 3.
+ */
+
+#ifndef _INCLUDE__SPEC__X86__CPU__VM_STATE_H_
+#define _INCLUDE__SPEC__X86__CPU__VM_STATE_H_
+
+#include
+
+namespace Genode
+{
+ struct Vm_state;
+}
+
+struct Genode::Vm_state
+{
+ template
+ class Register
+ {
+ private:
+
+ bool _valid;
+ T _value { };
+
+ public:
+
+ Register() : _valid(false) { }
+ Register(T value) : _valid(true), _value(value) { }
+
+ T value() const { return _value; }
+ void value(T value) { _value = value; _valid = true; }
+
+ bool valid() const { return _valid; }
+ void invalid() { _valid = false; }
+
+ Register &operator = (Register const &other)
+ {
+ _valid = other._valid;
+ /* keep original _value if other._valid is not valid */
+ if (_valid)
+ _value = other._value;
+
+ return *this;
+ }
+ };
+
+ struct Range {
+ addr_t base;
+ uint32_t limit;
+ };
+
+ struct Segment {
+ uint16_t sel, ar;
+ uint32_t limit;
+ addr_t base;
+ };
+
+ Register ax;
+ Register cx;
+ Register dx;
+ Register bx;
+
+ Register bp;
+ Register si;
+ Register di;
+
+ Register sp;
+ Register ip;
+ Register ip_len;
+ Register flags;
+
+ Register es;
+ Register ds;
+ Register fs;
+ Register gs;
+ Register cs;
+ Register ss;
+ Register tr;
+ Register ldtr;
+
+ Register gdtr;
+ Register idtr;
+
+ Register cr0;
+ Register cr2;
+ Register cr3;
+ Register cr4;
+
+ Register dr7;
+
+ Register sysenter_ip;
+ Register sysenter_sp;
+ Register sysenter_cs;
+
+ Register qual_primary;
+ Register qual_secondary;
+
+ Register ctrl_primary;
+ Register ctrl_secondary;
+
+ Register inj_info;
+ Register inj_error;
+
+ Register intr_state;
+ Register actv_state;
+
+ Register tsc;
+ Register tsc_offset;
+
+ Register efer;
+
+ Register pdpte_0;
+ Register pdpte_1;
+ Register pdpte_2;
+ Register pdpte_3;
+
+ Register r8;
+ Register r9;
+ Register r10;
+ Register r11;
+ Register r12;
+ Register r13;
+ Register r14;
+ Register r15;
+
+ Register star;
+ Register lstar;
+ Register fmask;
+ Register kernel_gs_base;
+
+ Register tpr;
+ Register tpr_threshold;
+
+ unsigned exit_reason;
+};
+
+#endif /* _INCLUDE__SPEC__X86__CPU__VM_STATE_H_ */