diff options
author | jhb <jhb@FreeBSD.org> | 2012-07-06 14:28:18 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2012-07-06 14:28:18 +0000 |
commit | 56b27dd2e7dd3da32311fcf8e49d670f4cf1a6c9 (patch) | |
tree | c0d43c2cd84c8f3e7897c688f8aba2caafe9e81c /contrib/binutils/gas | |
parent | 56c146fdcbd43808f8d51e728d011961a785854a (diff) | |
download | FreeBSD-src-56b27dd2e7dd3da32311fcf8e49d670f4cf1a6c9.zip FreeBSD-src-56b27dd2e7dd3da32311fcf8e49d670f4cf1a6c9.tar.gz |
Add support for the 'invept' and 'invvpid' instructions. Beyond simply
adding appropriate table entries, the assembler had to be adjusted as
these are the first non-SSE instructions to use a 3-byte opcode (and a
mandatory prefix to boot).
MFC after: 1 month
Diffstat (limited to 'contrib/binutils/gas')
-rw-r--r-- | contrib/binutils/gas/config/tc-i386.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/contrib/binutils/gas/config/tc-i386.c b/contrib/binutils/gas/config/tc-i386.c index 4c13a72..9af47c5 100644 --- a/contrib/binutils/gas/config/tc-i386.c +++ b/contrib/binutils/gas/config/tc-i386.c @@ -3990,6 +3990,16 @@ output_insn (void) goto check_prefix; } } + else if (i.tm.base_opcode == 0x660f3880 || i.tm.base_opcode == 0x660f3881) + { + /* invept and invvpid are 3 byte instructions with a + mandatory prefix. */ + if (i.tm.base_opcode & 0xff000000) + { + prefix = (i.tm.base_opcode >> 24) & 0xff; + add_prefix (prefix); + } + } else if ((i.tm.base_opcode & 0xff0000) != 0) { prefix = (i.tm.base_opcode >> 16) & 0xff; @@ -4029,6 +4039,12 @@ output_insn (void) p = frag_more (3); *p++ = (i.tm.base_opcode >> 16) & 0xff; } + else if (i.tm.base_opcode == 0x660f3880 || + i.tm.base_opcode == 0x660f3881) + { + p = frag_more (3); + *p++ = (i.tm.base_opcode >> 16) & 0xff; + } else p = frag_more (2); |