diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -537,6 +537,7 @@ -------------------- - Support ``-mindirect-branch-cs-prefix`` for call and jmp to indirect thunk. - Fix 32-bit ``__fastcall`` and ``__vectorcall`` ABI mismatch with MSVC. +- Support ISA of ``RAO-INT``. DWARF Support in Clang ---------------------- diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -4654,6 +4654,8 @@ def mno_prfchw : Flag<["-"], "mno-prfchw">, Group; def mptwrite : Flag<["-"], "mptwrite">, Group; def mno_ptwrite : Flag<["-"], "mno-ptwrite">, Group; +def mraoint : Flag<["-"], "mraoint">, Group; +def mno_raoint : Flag<["-"], "mno-raoint">, Group; def mrdpid : Flag<["-"], "mrdpid">, Group; def mno_rdpid : Flag<["-"], "mno-rdpid">, Group; def mrdpru : Flag<["-"], "mrdpru">, Group; diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -135,6 +135,7 @@ bool HasPTWRITE = false; bool HasINVPCID = false; bool HasENQCMD = false; + bool HasRAOINT = false; bool HasKL = false; // For key locker bool HasWIDEKL = false; // For wide key locker bool HasHRESET = false; diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -330,6 +330,8 @@ HasAMXINT8 = true; } else if (Feature == "+amx-tile") { HasAMXTILE = true; + } else if (Feature == "+raoint") { + HasRAOINT = true; } else if (Feature == "+avxvnni") { HasAVXVNNI = true; } else if (Feature == "+serialize") { @@ -774,6 +776,8 @@ Builder.defineMacro("__AMXINT8__"); if (HasAMXBF16) Builder.defineMacro("__AMXBF16__"); + if (HasRAOINT) + Builder.defineMacro("__RAOINT__"); if (HasAVXVNNI) Builder.defineMacro("__AVXVNNI__"); if (HasSERIALIZE) @@ -932,6 +936,7 @@ .Case("prefetchwt1", true) .Case("prfchw", true) .Case("ptwrite", true) + .Case("raoint", true) .Case("rdpid", true) .Case("rdpru", true) .Case("rdrnd", true) @@ -1028,6 +1033,7 @@ .Case("prefetchwt1", HasPREFETCHWT1) .Case("prfchw", HasPRFCHW) .Case("ptwrite", HasPTWRITE) + .Case("raoint", HasRAOINT) .Case("rdpid", HasRDPID) .Case("rdpru", HasRDPRU) .Case("rdrnd", HasRDRND) diff --git a/clang/lib/Headers/cpuid.h b/clang/lib/Headers/cpuid.h --- a/clang/lib/Headers/cpuid.h +++ b/clang/lib/Headers/cpuid.h @@ -200,6 +200,7 @@ #define bit_AMXINT8 0x02000000 /* Features in %eax for leaf 7 sub-leaf 1 */ +#define bit_RAOINT 0x00000008 #define bit_AVXVNNI 0x00000010 #define bit_AVX512BF16 0x00000020 #define bit_HRESET 0x00400000 diff --git a/clang/test/Driver/x86-target-features.c b/clang/test/Driver/x86-target-features.c --- a/clang/test/Driver/x86-target-features.c +++ b/clang/test/Driver/x86-target-features.c @@ -305,6 +305,11 @@ // AVX512FP16: "-target-feature" "+avx512fp16" // NO-AVX512FP16: "-target-feature" "-avx512fp16" +// RUN: %clang --target=i386 -march=i386 -mraoint %s -### 2>&1 | FileCheck -check-prefix=RAOINT %s +// RUN: %clang --target=i386 -march=i386 -mno-raoint %s -### 2>&1 | FileCheck -check-prefix=NO-RAOINT %s +// RAOINT: "-target-feature" "+raoint" +// NO-RAOINT: "-target-feature" "-raoint" + // RUN: %clang --target=i386 -march=i386 -mcrc32 %s -### 2>&1 | FileCheck -check-prefix=CRC32 %s // RUN: %clang --target=i386 -march=i386 -mno-crc32 %s -### 2>&1 | FileCheck -check-prefix=NO-CRC32 %s // CRC32: "-target-feature" "+crc32" diff --git a/clang/test/Preprocessor/x86_target_features.c b/clang/test/Preprocessor/x86_target_features.c --- a/clang/test/Preprocessor/x86_target_features.c +++ b/clang/test/Preprocessor/x86_target_features.c @@ -581,6 +581,14 @@ // AVX512FP16NOAVX512DQ-NOT: #define __AVX512DQ__ 1 // AVX512FP16NOAVX512DQ-NOT: #define __AVX512FP16__ 1 +// RUN: %clang -target i386-unknown-linux-gnu -march=atom -mraoint -x c -E -dM -o - %s | FileCheck -check-prefix=RAOINT %s + +// RAOINT: #define __RAOINT__ 1 + +// RUN: %clang -target i386-unknown-linux-gnu -march=atom -mno-raoint -x c -E -dM -o - %s | FileCheck -check-prefix=NO-RAOINT %s + +// NO-RAOINT-NOT: #define __RAOINT__ 1 + // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mcrc32 -x c -E -dM -o - %s | FileCheck -check-prefix=CRC32 %s // CRC32: #define __CRC32__ 1 diff --git a/llvm/include/llvm/Support/X86TargetParser.def b/llvm/include/llvm/Support/X86TargetParser.def --- a/llvm/include/llvm/Support/X86TargetParser.def +++ b/llvm/include/llvm/Support/X86TargetParser.def @@ -200,6 +200,7 @@ X86_FEATURE (XSAVEOPT, "xsaveopt") X86_FEATURE (XSAVES, "xsaves") X86_FEATURE (HRESET, "hreset") +X86_FEATURE (RAOINT, "raoint") X86_FEATURE (AVX512FP16, "avx512fp16") X86_FEATURE (AVXVNNI, "avxvnni") // These features aren't really CPU features, but the frontend can set them. diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp --- a/llvm/lib/Support/Host.cpp +++ b/llvm/lib/Support/Host.cpp @@ -1805,6 +1805,7 @@ Features["amx-int8"] = HasLeaf7 && ((EDX >> 25) & 1) && HasAMXSave; bool HasLeaf7Subleaf1 = MaxLevel >= 7 && !getX86CpuIDAndInfoEx(0x7, 0x1, &EAX, &EBX, &ECX, &EDX); + Features["raoint"] = HasLeaf7Subleaf1 && ((EAX >> 3) & 1); Features["avxvnni"] = HasLeaf7Subleaf1 && ((EAX >> 4) & 1) && HasAVXSave; Features["avx512bf16"] = HasLeaf7Subleaf1 && ((EAX >> 5) & 1) && HasAVX512Save; Features["hreset"] = HasLeaf7Subleaf1 && ((EAX >> 22) & 1); diff --git a/llvm/lib/Support/X86TargetParser.cpp b/llvm/lib/Support/X86TargetParser.cpp --- a/llvm/lib/Support/X86TargetParser.cpp +++ b/llvm/lib/Support/X86TargetParser.cpp @@ -581,6 +581,7 @@ constexpr FeatureBitset ImpliedFeaturesAMX_INT8 = FeatureAMX_TILE; constexpr FeatureBitset ImpliedFeaturesHRESET = {}; +static constexpr FeatureBitset ImpliedFeaturesRAOINT = {}; static constexpr FeatureBitset ImpliedFeaturesAVX512FP16 = FeatureAVX512BW | FeatureAVX512DQ | FeatureAVX512VL; // Key Locker Features diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -254,6 +254,9 @@ def FeatureAMXBF16 : SubtargetFeature<"amx-bf16", "HasAMXBF16", "true", "Support AMX-BF16 instructions", [FeatureAMXTILE]>; +def FeatureRAOINT : SubtargetFeature<"raoint", "HasRAOINT", "true", + "Support RAO-INT instructions", + []>; def FeatureINVPCID : SubtargetFeature<"invpcid", "HasINVPCID", "true", "Invalidate Process-Context Identifier">; def FeatureSGX : SubtargetFeature<"sgx", "HasSGX", "true", diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td --- a/llvm/lib/Target/X86/X86InstrInfo.td +++ b/llvm/lib/Target/X86/X86InstrInfo.td @@ -980,6 +980,7 @@ def HasPCONFIG : Predicate<"Subtarget->hasPCONFIG()">; def HasENQCMD : Predicate<"Subtarget->hasENQCMD()">; def HasKL : Predicate<"Subtarget->hasKL()">; +def HasRAOINT : Predicate<"Subtarget->hasRAOINT()">; def HasWIDEKL : Predicate<"Subtarget->hasWIDEKL()">; def HasHRESET : Predicate<"Subtarget->hasHRESET()">; def HasSERIALIZE : Predicate<"Subtarget->hasSERIALIZE()">; @@ -3167,6 +3168,9 @@ // AMX instructions include "X86InstrAMX.td" +// RAOINT instructions +include "X86InstrRAOINT.td" + // System instructions. include "X86InstrSystem.td" diff --git a/llvm/lib/Target/X86/X86InstrRAOINT.td b/llvm/lib/Target/X86/X86InstrRAOINT.td new file mode 100644 --- /dev/null +++ b/llvm/lib/Target/X86/X86InstrRAOINT.td @@ -0,0 +1,31 @@ +//===---- X86InstrRAOINT.td -------------------------------*- tablegen -*--===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file describes the instructions that make up the Intel AMX instruction +// set. +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// RAOINT instructions +multiclass RAOINT_BASE { + let Predicates = [HasRAOINT] in + def 32mr : I<0xfc, MRMDestMem, (outs), (ins i32mem:$dst, GR32:$src), + !strconcat(OpcodeStr, "{l}\t{$src, $dst|$dst, $src}"), + []>, Sched<[WriteALURMW]>; + + let Predicates = [HasRAOINT, In64BitMode] in + def 64mr : I<0xfc, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src), + !strconcat(OpcodeStr, "{q}\t{$src, $dst|$dst, $src}"), + []>, Sched<[WriteALURMW]>, REX_W; +} + +defm AADD : RAOINT_BASE<"aadd">, T8PS; +defm AAND : RAOINT_BASE<"aand">, T8PD; +defm AOR : RAOINT_BASE<"aor" >, T8XD; +defm AXOR : RAOINT_BASE<"axor">, T8XS; diff --git a/llvm/test/MC/Disassembler/X86/rao-int.txt b/llvm/test/MC/Disassembler/X86/rao-int.txt new file mode 100644 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/rao-int.txt @@ -0,0 +1,98 @@ +# RUN: llvm-mc --disassemble %s -triple=i686 | FileCheck %s --check-prefixes=ATT +# RUN: llvm-mc --disassemble %s -triple=i686 -x86-asm-syntax=intel --output-asm-variant=1 | FileCheck %s --check-prefixes=INTEL + +# ATT: aaddl %ebx, 268435456(%esp,%esi,8) +# INTEL: aadd dword ptr [esp + 8*esi + 268435456], ebx +0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: aaddl %ebx, 291(%edi,%eax,4) +# INTEL: aadd dword ptr [edi + 4*eax + 291], ebx +0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: aaddl %ebx, (%eax) +# INTEL: aadd dword ptr [eax], ebx +0x0f,0x38,0xfc,0x18 + +# ATT: aaddl %ebx, -512(,%ebp,2) +# INTEL: aadd dword ptr [2*ebp - 512], ebx +0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aaddl %ebx, 2032(%ecx) +# INTEL: aadd dword ptr [ecx + 2032], ebx +0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: aaddl %ebx, -2048(%edx) +# INTEL: aadd dword ptr [edx - 2048], ebx +0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff + +# ATT: aandl %ebx, 268435456(%esp,%esi,8) +# INTEL: aand dword ptr [esp + 8*esi + 268435456], ebx +0x66,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: aandl %ebx, 291(%edi,%eax,4) +# INTEL: aand dword ptr [edi + 4*eax + 291], ebx +0x66,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: aandl %ebx, (%eax) +# INTEL: aand dword ptr [eax], ebx +0x66,0x0f,0x38,0xfc,0x18 + +# ATT: aandl %ebx, -512(,%ebp,2) +# INTEL: aand dword ptr [2*ebp - 512], ebx +0x66,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aandl %ebx, 2032(%ecx) +# INTEL: aand dword ptr [ecx + 2032], ebx +0x66,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: aandl %ebx, -2048(%edx) +# INTEL: aand dword ptr [edx - 2048], ebx +0x66,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff + +# ATT: aorl %ebx, 268435456(%esp,%esi,8) +# INTEL: aor dword ptr [esp + 8*esi + 268435456], ebx +0xf2,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: aorl %ebx, 291(%edi,%eax,4) +# INTEL: aor dword ptr [edi + 4*eax + 291], ebx +0xf2,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: aorl %ebx, (%eax) +# INTEL: aor dword ptr [eax], ebx +0xf2,0x0f,0x38,0xfc,0x18 + +# ATT: aorl %ebx, -512(,%ebp,2) +# INTEL: aor dword ptr [2*ebp - 512], ebx +0xf2,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aorl %ebx, 2032(%ecx) +# INTEL: aor dword ptr [ecx + 2032], ebx +0xf2,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: aorl %ebx, -2048(%edx) +# INTEL: aor dword ptr [edx - 2048], ebx +0xf2,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff + +# ATT: axorl %ebx, 268435456(%esp,%esi,8) +# INTEL: axor dword ptr [esp + 8*esi + 268435456], ebx +0xf3,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: axorl %ebx, 291(%edi,%eax,4) +# INTEL: axor dword ptr [edi + 4*eax + 291], ebx +0xf3,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: axorl %ebx, (%eax) +# INTEL: axor dword ptr [eax], ebx +0xf3,0x0f,0x38,0xfc,0x18 + +# ATT: axorl %ebx, -512(,%ebp,2) +# INTEL: axor dword ptr [2*ebp - 512], ebx +0xf3,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: axorl %ebx, 2032(%ecx) +# INTEL: axor dword ptr [ecx + 2032], ebx +0xf3,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: axorl %ebx, -2048(%edx) +# INTEL: axor dword ptr [edx - 2048], ebx +0xf3,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff diff --git a/llvm/test/MC/Disassembler/X86/x86-64-rao-int.txt b/llvm/test/MC/Disassembler/X86/x86-64-rao-int.txt new file mode 100644 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/x86-64-rao-int.txt @@ -0,0 +1,194 @@ +# RUN: llvm-mc --disassemble %s -triple=x86_64 | FileCheck %s --check-prefixes=ATT +# RUN: llvm-mc --disassemble %s -triple=x86_64 -x86-asm-syntax=intel --output-asm-variant=1 | FileCheck %s --check-prefixes=INTEL + +# ATT: aaddq %r9, 268435456(%rbp,%r14,8) +# INTEL: aadd qword ptr [rbp + 8*r14 + 268435456], r9 +0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10 + +# ATT: aaddq %r9, 291(%r8,%rax,4) +# INTEL: aadd qword ptr [r8 + 4*rax + 291], r9 +0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: aaddq %r9, (%rip) +# INTEL: aadd qword ptr [rip], r9 +0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00 + +# ATT: aaddq %r9, -512(,%rbp,2) +# INTEL: aadd qword ptr [2*rbp - 512], r9 +0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aaddq %r9, 2032(%rcx) +# INTEL: aadd qword ptr [rcx + 2032], r9 +0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00 + +# ATT: aaddq %r9, -2048(%rdx) +# INTEL: aadd qword ptr [rdx - 2048], r9 +0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff + +# ATT: aaddl %ebx, 268435456(%esp,%esi,8) +# INTEL: aadd dword ptr [esp + 8*esi + 268435456], ebx +0x67,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: aaddl %ebx, 291(%edi,%eax,4) +# INTEL: aadd dword ptr [edi + 4*eax + 291], ebx +0x67,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: aaddl %ebx, (%eax) +# INTEL: aadd dword ptr [eax], ebx +0x67,0x0f,0x38,0xfc,0x18 + +# ATT: aaddl %ebx, -512(,%ebp,2) +# INTEL: aadd dword ptr [2*ebp - 512], ebx +0x67,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aaddl %ebx, 2032(%ecx) +# INTEL: aadd dword ptr [ecx + 2032], ebx +0x67,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: aaddl %ebx, -2048(%edx) +# INTEL: aadd dword ptr [edx - 2048], ebx +0x67,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff + +# ATT: aandq %r9, 268435456(%rbp,%r14,8) +# INTEL: aand qword ptr [rbp + 8*r14 + 268435456], r9 +0x66,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10 + +# ATT: aandq %r9, 291(%r8,%rax,4) +# INTEL: aand qword ptr [r8 + 4*rax + 291], r9 +0x66,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: aandq %r9, (%rip) +# INTEL: aand qword ptr [rip], r9 +0x66,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00 + +# ATT: aandq %r9, -512(,%rbp,2) +# INTEL: aand qword ptr [2*rbp - 512], r9 +0x66,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aandq %r9, 2032(%rcx) +# INTEL: aand qword ptr [rcx + 2032], r9 +0x66,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00 + +# ATT: aandq %r9, -2048(%rdx) +# INTEL: aand qword ptr [rdx - 2048], r9 +0x66,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff + +# ATT: aandl %ebx, 268435456(%esp,%esi,8) +# INTEL: aand dword ptr [esp + 8*esi + 268435456], ebx +0x67,0x66,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: aandl %ebx, 291(%edi,%eax,4) +# INTEL: aand dword ptr [edi + 4*eax + 291], ebx +0x67,0x66,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: aandl %ebx, (%eax) +# INTEL: aand dword ptr [eax], ebx +0x67,0x66,0x0f,0x38,0xfc,0x18 + +# ATT: aandl %ebx, -512(,%ebp,2) +# INTEL: aand dword ptr [2*ebp - 512], ebx +0x67,0x66,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aandl %ebx, 2032(%ecx) +# INTEL: aand dword ptr [ecx + 2032], ebx +0x67,0x66,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: aandl %ebx, -2048(%edx) +# INTEL: aand dword ptr [edx - 2048], ebx +0x67,0x66,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff + +# ATT: aorq %r9, 268435456(%rbp,%r14,8) +# INTEL: aor qword ptr [rbp + 8*r14 + 268435456], r9 +0xf2,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10 + +# ATT: aorq %r9, 291(%r8,%rax,4) +# INTEL: aor qword ptr [r8 + 4*rax + 291], r9 +0xf2,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: aorq %r9, (%rip) +# INTEL: aor qword ptr [rip], r9 +0xf2,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00 + +# ATT: aorq %r9, -512(,%rbp,2) +# INTEL: aor qword ptr [2*rbp - 512], r9 +0xf2,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aorq %r9, 2032(%rcx) +# INTEL: aor qword ptr [rcx + 2032], r9 +0xf2,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00 + +# ATT: aorq %r9, -2048(%rdx) +# INTEL: aor qword ptr [rdx - 2048], r9 +0xf2,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff + +# ATT: aorl %ebx, 268435456(%esp,%esi,8) +# INTEL: aor dword ptr [esp + 8*esi + 268435456], ebx +0x67,0xf2,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: aorl %ebx, 291(%edi,%eax,4) +# INTEL: aor dword ptr [edi + 4*eax + 291], ebx +0x67,0xf2,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: aorl %ebx, (%eax) +# INTEL: aor dword ptr [eax], ebx +0x67,0xf2,0x0f,0x38,0xfc,0x18 + +# ATT: aorl %ebx, -512(,%ebp,2) +# INTEL: aor dword ptr [2*ebp - 512], ebx +0x67,0xf2,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: aorl %ebx, 2032(%ecx) +# INTEL: aor dword ptr [ecx + 2032], ebx +0x67,0xf2,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: aorl %ebx, -2048(%edx) +# INTEL: aor dword ptr [edx - 2048], ebx +0x67,0xf2,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff + +# ATT: axorq %r9, 268435456(%rbp,%r14,8) +# INTEL: axor qword ptr [rbp + 8*r14 + 268435456], r9 +0xf3,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10 + +# ATT: axorq %r9, 291(%r8,%rax,4) +# INTEL: axor qword ptr [r8 + 4*rax + 291], r9 +0xf3,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: axorq %r9, (%rip) +# INTEL: axor qword ptr [rip], r9 +0xf3,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00 + +# ATT: axorq %r9, -512(,%rbp,2) +# INTEL: axor qword ptr [2*rbp - 512], r9 +0xf3,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: axorq %r9, 2032(%rcx) +# INTEL: axor qword ptr [rcx + 2032], r9 +0xf3,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00 + +# ATT: axorq %r9, -2048(%rdx) +# INTEL: axor qword ptr [rdx - 2048], r9 +0xf3,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff + +# ATT: axorl %ebx, 268435456(%esp,%esi,8) +# INTEL: axor dword ptr [esp + 8*esi + 268435456], ebx +0x67,0xf3,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10 + +# ATT: axorl %ebx, 291(%edi,%eax,4) +# INTEL: axor dword ptr [edi + 4*eax + 291], ebx +0x67,0xf3,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00 + +# ATT: axorl %ebx, (%eax) +# INTEL: axor dword ptr [eax], ebx +0x67,0xf3,0x0f,0x38,0xfc,0x18 + +# ATT: axorl %ebx, -512(,%ebp,2) +# INTEL: axor dword ptr [2*ebp - 512], ebx +0x67,0xf3,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff + +# ATT: axorl %ebx, 2032(%ecx) +# INTEL: axor dword ptr [ecx + 2032], ebx +0x67,0xf3,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00 + +# ATT: axorl %ebx, -2048(%edx) +# INTEL: axor dword ptr [edx - 2048], ebx +0x67,0xf3,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff diff --git a/llvm/test/MC/X86/rao-int-att.s b/llvm/test/MC/X86/rao-int-att.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/X86/rao-int-att.s @@ -0,0 +1,97 @@ +// RUN: llvm-mc -triple i686-unknown-unknown --show-encoding %s | FileCheck %s + +// CHECK: aaddl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aaddl %ebx, 268435456(%esp,%esi,8) + +// CHECK: aaddl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aaddl %ebx, 291(%edi,%eax,4) + +// CHECK: aaddl %ebx, (%eax) +// CHECK: encoding: [0x0f,0x38,0xfc,0x18] + aaddl %ebx, (%eax) + +// CHECK: aaddl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aaddl %ebx, -512(,%ebp,2) + +// CHECK: aaddl %ebx, 2032(%ecx) +// CHECK: encoding: [0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aaddl %ebx, 2032(%ecx) + +// CHECK: aaddl %ebx, -2048(%edx) +// CHECK: encoding: [0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aaddl %ebx, -2048(%edx) + +// CHECK: aandl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aandl %ebx, 268435456(%esp,%esi,8) + +// CHECK: aandl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aandl %ebx, 291(%edi,%eax,4) + +// CHECK: aandl %ebx, (%eax) +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x18] + aandl %ebx, (%eax) + +// CHECK: aandl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aandl %ebx, -512(,%ebp,2) + +// CHECK: aandl %ebx, 2032(%ecx) +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aandl %ebx, 2032(%ecx) + +// CHECK: aandl %ebx, -2048(%edx) +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aandl %ebx, -2048(%edx) + +// CHECK: aorl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aorl %ebx, 268435456(%esp,%esi,8) + +// CHECK: aorl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aorl %ebx, 291(%edi,%eax,4) + +// CHECK: aorl %ebx, (%eax) +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x18] + aorl %ebx, (%eax) + +// CHECK: aorl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aorl %ebx, -512(,%ebp,2) + +// CHECK: aorl %ebx, 2032(%ecx) +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aorl %ebx, 2032(%ecx) + +// CHECK: aorl %ebx, -2048(%edx) +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aorl %ebx, -2048(%edx) + +// CHECK: axorl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + axorl %ebx, 268435456(%esp,%esi,8) + +// CHECK: axorl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + axorl %ebx, 291(%edi,%eax,4) + +// CHECK: axorl %ebx, (%eax) +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x18] + axorl %ebx, (%eax) + +// CHECK: axorl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + axorl %ebx, -512(,%ebp,2) + +// CHECK: axorl %ebx, 2032(%ecx) +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + axorl %ebx, 2032(%ecx) + +// CHECK: axorl %ebx, -2048(%edx) +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + axorl %ebx, -2048(%edx) diff --git a/llvm/test/MC/X86/rao-int-intel.s b/llvm/test/MC/X86/rao-int-intel.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/X86/rao-int-intel.s @@ -0,0 +1,97 @@ +// RUN: llvm-mc -triple i686-unknown-unknown -x86-asm-syntax=intel -output-asm-variant=1 --show-encoding %s | FileCheck %s + +// CHECK: aadd dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aadd dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: aadd dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aadd dword ptr [edi + 4*eax + 291], ebx + +// CHECK: aadd dword ptr [eax], ebx +// CHECK: encoding: [0x0f,0x38,0xfc,0x18] + aadd dword ptr [eax], ebx + +// CHECK: aadd dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aadd dword ptr [2*ebp - 512], ebx + +// CHECK: aadd dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aadd dword ptr [ecx + 2032], ebx + +// CHECK: aadd dword ptr [edx - 2048], ebx +// CHECK: encoding: [0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aadd dword ptr [edx - 2048], ebx + +// CHECK: aand dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aand dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: aand dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aand dword ptr [edi + 4*eax + 291], ebx + +// CHECK: aand dword ptr [eax], ebx +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x18] + aand dword ptr [eax], ebx + +// CHECK: aand dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aand dword ptr [2*ebp - 512], ebx + +// CHECK: aand dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aand dword ptr [ecx + 2032], ebx + +// CHECK: aand dword ptr [edx - 2048], ebx +// CHECK: encoding: [0x66,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aand dword ptr [edx - 2048], ebx + +// CHECK: aor dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aor dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: aor dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aor dword ptr [edi + 4*eax + 291], ebx + +// CHECK: aor dword ptr [eax], ebx +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x18] + aor dword ptr [eax], ebx + +// CHECK: aor dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aor dword ptr [2*ebp - 512], ebx + +// CHECK: aor dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aor dword ptr [ecx + 2032], ebx + +// CHECK: aor dword ptr [edx - 2048], ebx +// CHECK: encoding: [0xf2,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aor dword ptr [edx - 2048], ebx + +// CHECK: axor dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + axor dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: axor dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + axor dword ptr [edi + 4*eax + 291], ebx + +// CHECK: axor dword ptr [eax], ebx +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x18] + axor dword ptr [eax], ebx + +// CHECK: axor dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + axor dword ptr [2*ebp - 512], ebx + +// CHECK: axor dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + axor dword ptr [ecx + 2032], ebx + +// CHECK: axor dword ptr [edx - 2048], ebx +// CHECK: encoding: [0xf3,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + axor dword ptr [edx - 2048], ebx diff --git a/llvm/test/MC/X86/x86-64-rao-int-att.s b/llvm/test/MC/X86/x86-64-rao-int-att.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/X86/x86-64-rao-int-att.s @@ -0,0 +1,193 @@ +// RUN: llvm-mc -triple x86_64-unknown-unknown --show-encoding %s | FileCheck %s + +// CHECK: aaddq %r9, 268435456(%rbp,%r14,8) +// CHECK: encoding: [0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + aaddq %r9, 268435456(%rbp,%r14,8) + +// CHECK: aaddq %r9, 291(%r8,%rax,4) +// CHECK: encoding: [0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + aaddq %r9, 291(%r8,%rax,4) + +// CHECK: aaddq %r9, (%rip) +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + aaddq %r9, (%rip) + +// CHECK: aaddq %r9, -512(,%rbp,2) +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + aaddq %r9, -512(,%rbp,2) + +// CHECK: aaddq %r9, 2032(%rcx) +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + aaddq %r9, 2032(%rcx) + +// CHECK: aaddq %r9, -2048(%rdx) +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + aaddq %r9, -2048(%rdx) + +// CHECK: aaddl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aaddl %ebx, 268435456(%esp,%esi,8) + +// CHECK: aaddl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aaddl %ebx, 291(%edi,%eax,4) + +// CHECK: aaddl %ebx, (%eax) +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x18] + aaddl %ebx, (%eax) + +// CHECK: aaddl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aaddl %ebx, -512(,%ebp,2) + +// CHECK: aaddl %ebx, 2032(%ecx) +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aaddl %ebx, 2032(%ecx) + +// CHECK: aaddl %ebx, -2048(%edx) +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aaddl %ebx, -2048(%edx) + +// CHECK: aandq %r9, 268435456(%rbp,%r14,8) +// CHECK: encoding: [0x66,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + aandq %r9, 268435456(%rbp,%r14,8) + +// CHECK: aandq %r9, 291(%r8,%rax,4) +// CHECK: encoding: [0x66,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + aandq %r9, 291(%r8,%rax,4) + +// CHECK: aandq %r9, (%rip) +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + aandq %r9, (%rip) + +// CHECK: aandq %r9, -512(,%rbp,2) +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + aandq %r9, -512(,%rbp,2) + +// CHECK: aandq %r9, 2032(%rcx) +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + aandq %r9, 2032(%rcx) + +// CHECK: aandq %r9, -2048(%rdx) +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + aandq %r9, -2048(%rdx) + +// CHECK: aandl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aandl %ebx, 268435456(%esp,%esi,8) + +// CHECK: aandl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aandl %ebx, 291(%edi,%eax,4) + +// CHECK: aandl %ebx, (%eax) +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x18] + aandl %ebx, (%eax) + +// CHECK: aandl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aandl %ebx, -512(,%ebp,2) + +// CHECK: aandl %ebx, 2032(%ecx) +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aandl %ebx, 2032(%ecx) + +// CHECK: aandl %ebx, -2048(%edx) +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aandl %ebx, -2048(%edx) + +// CHECK: aorq %r9, 268435456(%rbp,%r14,8) +// CHECK: encoding: [0xf2,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + aorq %r9, 268435456(%rbp,%r14,8) + +// CHECK: aorq %r9, 291(%r8,%rax,4) +// CHECK: encoding: [0xf2,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + aorq %r9, 291(%r8,%rax,4) + +// CHECK: aorq %r9, (%rip) +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + aorq %r9, (%rip) + +// CHECK: aorq %r9, -512(,%rbp,2) +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + aorq %r9, -512(,%rbp,2) + +// CHECK: aorq %r9, 2032(%rcx) +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + aorq %r9, 2032(%rcx) + +// CHECK: aorq %r9, -2048(%rdx) +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + aorq %r9, -2048(%rdx) + +// CHECK: aorl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aorl %ebx, 268435456(%esp,%esi,8) + +// CHECK: aorl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aorl %ebx, 291(%edi,%eax,4) + +// CHECK: aorl %ebx, (%eax) +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x18] + aorl %ebx, (%eax) + +// CHECK: aorl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aorl %ebx, -512(,%ebp,2) + +// CHECK: aorl %ebx, 2032(%ecx) +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aorl %ebx, 2032(%ecx) + +// CHECK: aorl %ebx, -2048(%edx) +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aorl %ebx, -2048(%edx) + +// CHECK: axorq %r9, 268435456(%rbp,%r14,8) +// CHECK: encoding: [0xf3,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + axorq %r9, 268435456(%rbp,%r14,8) + +// CHECK: axorq %r9, 291(%r8,%rax,4) +// CHECK: encoding: [0xf3,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + axorq %r9, 291(%r8,%rax,4) + +// CHECK: axorq %r9, (%rip) +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + axorq %r9, (%rip) + +// CHECK: axorq %r9, -512(,%rbp,2) +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + axorq %r9, -512(,%rbp,2) + +// CHECK: axorq %r9, 2032(%rcx) +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + axorq %r9, 2032(%rcx) + +// CHECK: axorq %r9, -2048(%rdx) +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + axorq %r9, -2048(%rdx) + +// CHECK: axorl %ebx, 268435456(%esp,%esi,8) +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + axorl %ebx, 268435456(%esp,%esi,8) + +// CHECK: axorl %ebx, 291(%edi,%eax,4) +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + axorl %ebx, 291(%edi,%eax,4) + +// CHECK: axorl %ebx, (%eax) +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x18] + axorl %ebx, (%eax) + +// CHECK: axorl %ebx, -512(,%ebp,2) +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + axorl %ebx, -512(,%ebp,2) + +// CHECK: axorl %ebx, 2032(%ecx) +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + axorl %ebx, 2032(%ecx) + +// CHECK: axorl %ebx, -2048(%edx) +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + axorl %ebx, -2048(%edx) diff --git a/llvm/test/MC/X86/x86-64-rao-int-intel.s b/llvm/test/MC/X86/x86-64-rao-int-intel.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/X86/x86-64-rao-int-intel.s @@ -0,0 +1,193 @@ +// RUN: llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel -output-asm-variant=1 --show-encoding %s | FileCheck %s + +// CHECK: aadd qword ptr [rbp + 8*r14 + 268435456], r9 +// CHECK: encoding: [0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + aadd qword ptr [rbp + 8*r14 + 268435456], r9 + +// CHECK: aadd qword ptr [r8 + 4*rax + 291], r9 +// CHECK: encoding: [0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + aadd qword ptr [r8 + 4*rax + 291], r9 + +// CHECK: aadd qword ptr [rip], r9 +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + aadd qword ptr [rip], r9 + +// CHECK: aadd qword ptr [2*rbp - 512], r9 +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + aadd qword ptr [2*rbp - 512], r9 + +// CHECK: aadd qword ptr [rcx + 2032], r9 +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + aadd qword ptr [rcx + 2032], r9 + +// CHECK: aadd qword ptr [rdx - 2048], r9 +// CHECK: encoding: [0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + aadd qword ptr [rdx - 2048], r9 + +// CHECK: aadd dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aadd dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: aadd dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aadd dword ptr [edi + 4*eax + 291], ebx + +// CHECK: aadd dword ptr [eax], ebx +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x18] + aadd dword ptr [eax], ebx + +// CHECK: aadd dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aadd dword ptr [2*ebp - 512], ebx + +// CHECK: aadd dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aadd dword ptr [ecx + 2032], ebx + +// CHECK: aadd dword ptr [edx - 2048], ebx +// CHECK: encoding: [0x67,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aadd dword ptr [edx - 2048], ebx + +// CHECK: aand qword ptr [rbp + 8*r14 + 268435456], r9 +// CHECK: encoding: [0x66,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + aand qword ptr [rbp + 8*r14 + 268435456], r9 + +// CHECK: aand qword ptr [r8 + 4*rax + 291], r9 +// CHECK: encoding: [0x66,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + aand qword ptr [r8 + 4*rax + 291], r9 + +// CHECK: aand qword ptr [rip], r9 +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + aand qword ptr [rip], r9 + +// CHECK: aand qword ptr [2*rbp - 512], r9 +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + aand qword ptr [2*rbp - 512], r9 + +// CHECK: aand qword ptr [rcx + 2032], r9 +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + aand qword ptr [rcx + 2032], r9 + +// CHECK: aand qword ptr [rdx - 2048], r9 +// CHECK: encoding: [0x66,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + aand qword ptr [rdx - 2048], r9 + +// CHECK: aand dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aand dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: aand dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aand dword ptr [edi + 4*eax + 291], ebx + +// CHECK: aand dword ptr [eax], ebx +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x18] + aand dword ptr [eax], ebx + +// CHECK: aand dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aand dword ptr [2*ebp - 512], ebx + +// CHECK: aand dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aand dword ptr [ecx + 2032], ebx + +// CHECK: aand dword ptr [edx - 2048], ebx +// CHECK: encoding: [0x67,0x66,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aand dword ptr [edx - 2048], ebx + +// CHECK: aor qword ptr [rbp + 8*r14 + 268435456], r9 +// CHECK: encoding: [0xf2,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + aor qword ptr [rbp + 8*r14 + 268435456], r9 + +// CHECK: aor qword ptr [r8 + 4*rax + 291], r9 +// CHECK: encoding: [0xf2,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + aor qword ptr [r8 + 4*rax + 291], r9 + +// CHECK: aor qword ptr [rip], r9 +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + aor qword ptr [rip], r9 + +// CHECK: aor qword ptr [2*rbp - 512], r9 +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + aor qword ptr [2*rbp - 512], r9 + +// CHECK: aor qword ptr [rcx + 2032], r9 +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + aor qword ptr [rcx + 2032], r9 + +// CHECK: aor qword ptr [rdx - 2048], r9 +// CHECK: encoding: [0xf2,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + aor qword ptr [rdx - 2048], r9 + +// CHECK: aor dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + aor dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: aor dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + aor dword ptr [edi + 4*eax + 291], ebx + +// CHECK: aor dword ptr [eax], ebx +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x18] + aor dword ptr [eax], ebx + +// CHECK: aor dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + aor dword ptr [2*ebp - 512], ebx + +// CHECK: aor dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + aor dword ptr [ecx + 2032], ebx + +// CHECK: aor dword ptr [edx - 2048], ebx +// CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + aor dword ptr [edx - 2048], ebx + +// CHECK: axor qword ptr [rbp + 8*r14 + 268435456], r9 +// CHECK: encoding: [0xf3,0x4e,0x0f,0x38,0xfc,0x8c,0xf5,0x00,0x00,0x00,0x10] + axor qword ptr [rbp + 8*r14 + 268435456], r9 + +// CHECK: axor qword ptr [r8 + 4*rax + 291], r9 +// CHECK: encoding: [0xf3,0x4d,0x0f,0x38,0xfc,0x8c,0x80,0x23,0x01,0x00,0x00] + axor qword ptr [r8 + 4*rax + 291], r9 + +// CHECK: axor qword ptr [rip], r9 +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x0d,0x00,0x00,0x00,0x00] + axor qword ptr [rip], r9 + +// CHECK: axor qword ptr [2*rbp - 512], r9 +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x0c,0x6d,0x00,0xfe,0xff,0xff] + axor qword ptr [2*rbp - 512], r9 + +// CHECK: axor qword ptr [rcx + 2032], r9 +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x89,0xf0,0x07,0x00,0x00] + axor qword ptr [rcx + 2032], r9 + +// CHECK: axor qword ptr [rdx - 2048], r9 +// CHECK: encoding: [0xf3,0x4c,0x0f,0x38,0xfc,0x8a,0x00,0xf8,0xff,0xff] + axor qword ptr [rdx - 2048], r9 + +// CHECK: axor dword ptr [esp + 8*esi + 268435456], ebx +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x9c,0xf4,0x00,0x00,0x00,0x10] + axor dword ptr [esp + 8*esi + 268435456], ebx + +// CHECK: axor dword ptr [edi + 4*eax + 291], ebx +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x9c,0x87,0x23,0x01,0x00,0x00] + axor dword ptr [edi + 4*eax + 291], ebx + +// CHECK: axor dword ptr [eax], ebx +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x18] + axor dword ptr [eax], ebx + +// CHECK: axor dword ptr [2*ebp - 512], ebx +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x1c,0x6d,0x00,0xfe,0xff,0xff] + axor dword ptr [2*ebp - 512], ebx + +// CHECK: axor dword ptr [ecx + 2032], ebx +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x99,0xf0,0x07,0x00,0x00] + axor dword ptr [ecx + 2032], ebx + +// CHECK: axor dword ptr [edx - 2048], ebx +// CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xfc,0x9a,0x00,0xf8,0xff,0xff] + axor dword ptr [edx - 2048], ebx