summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/decoder
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-02-25 10:17:49 -0800
committerGabe Black <gblack@eecs.umich.edu>2009-02-25 10:17:49 -0800
commit6325245e3ea7fae6609d0e9854c5ee7279140c02 (patch)
tree4c2e0bd623b55e8a2e6f02d43e4eb74f61296c6e /src/arch/x86/isa/decoder
parentdadc30b0a4dcf50c20c9d2b33890b94323fa0394 (diff)
downloadgem5-6325245e3ea7fae6609d0e9854c5ee7279140c02.tar.xz
X86: Implement the longmode versions of the syscall instruction.
Diffstat (limited to 'src/arch/x86/isa/decoder')
-rw-r--r--src/arch/x86/isa/decoder/two_byte_opcodes.isa8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
index 67845fe8d..887b5bb14 100644
--- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
@@ -254,7 +254,13 @@
}
}
#if FULL_SYSTEM
- 0x05: syscall();
+ 0x05: decode MODE_MODE {
+ 0x0: decode MODE_SUBMODE {
+ 0x0: Inst::SYSCALL_64();
+ 0x1: Inst::SYSCALL_COMPAT();
+ }
+ 0x1: Inst::SYSCALL_LEGACY();
+ }
#else
0x05: SyscallInst::syscall('xc->syscall(Rax)', IsSyscall);
#endif