From d4f205ea2ff2800b253d4681afaa6af330bfa33b Mon Sep 17 00:00:00 2001 From: Christian Menard Date: Tue, 26 Nov 2013 17:51:07 +0100 Subject: x86: Implementation of Int3 and Int_Ib in long mode This is an implementation of the x86 int3 and int immediate instructions for long mode according to 'AMD64 Programmers Manual Volume 3'. --- .../control_transfer/interrupts_and_exceptions.py | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/arch/x86/isa/insts') diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py index 19a344008..d50e40e61 100644 --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py @@ -221,6 +221,34 @@ skipSegmentSquashing: def macroop IRET_VIRT { panic "Virtual mode iret isn't implemented!" }; + +def macroop INT3 { + + limm t1, 0x03, dataSize=8 + + rdip t7 + + # Are we in long mode? + rdm5reg t5 + andi t0, t5, 0x1, flags=(EZF,) + br rom_label("longModeSoftInterrupt"), flags=(CEZF,) + br rom_label("legacyModeInterrupt") +}; + +def macroop INT_I { + + #load the byte-sized interrupt vector specified in the instruction + .adjust_imm trimImm(8) + limm t1, imm, dataSize=8 + + rdip t7 + + # Are we in long mode? + rdm5reg t5 + andi t0, t5, 0x1, flags=(EZF,) + br rom_label("longModeSoftInterrupt"), flags=(CEZF,) + br rom_label("legacyModeInterrupt") +}; ''' #let {{ # class INT(Inst): -- cgit v1.2.3