8 changes: 8 additions & 0 deletions clang/test/Preprocessor/x86_target_features.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,14 @@

// NO-CMPCCXADD-NOT: #define __CMPCCXADD__ 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
Expand Down
21 changes: 21 additions & 0 deletions llvm/include/llvm/IR/IntrinsicsX86.td
Original file line number Diff line number Diff line change
Expand Up @@ -5136,6 +5136,27 @@ let TargetPrefix = "x86" in {
[ImmArg<ArgIndex<0>>,
ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
}
//===----------------------------------------------------------------------===//
// RAO-INT intrinsics
let TargetPrefix = "x86" in {
def int_x86_aadd32 : ClangBuiltin<"__builtin_ia32_aadd32">,
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>;
def int_x86_aadd64 : ClangBuiltin<"__builtin_ia32_aadd64">,
Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
def int_x86_aand32 : ClangBuiltin<"__builtin_ia32_aand32">,
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>;
def int_x86_aand64 : ClangBuiltin<"__builtin_ia32_aand64">,
Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
def int_x86_aor32 : ClangBuiltin<"__builtin_ia32_aor32">,
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>;
def int_x86_aor64 : ClangBuiltin<"__builtin_ia32_aor64">,
Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
def int_x86_axor32 : ClangBuiltin<"__builtin_ia32_axor32">,
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>;
def int_x86_axor64 : ClangBuiltin<"__builtin_ia32_axor64">,
Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
}

//===----------------------------------------------------------------------===//
// UINTR - User Level Interrupt

Expand Down
1 change: 1 addition & 0 deletions llvm/include/llvm/Support/X86TargetParser.def
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ X86_FEATURE (XSAVEC, "xsavec")
X86_FEATURE (XSAVEOPT, "xsaveopt")
X86_FEATURE (XSAVES, "xsaves")
X86_FEATURE (HRESET, "hreset")
X86_FEATURE (RAOINT, "raoint")
X86_FEATURE (AVX512FP16, "avx512fp16")
X86_FEATURE (AMX_FP16, "amx-fp16")
X86_FEATURE (CMPCCXADD, "cmpccxadd")
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Support/Host.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1805,6 +1805,7 @@ bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
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["amx-fp16"] = HasLeaf7Subleaf1 && ((EAX >> 21) & 1) && HasAMXSave;
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Support/X86TargetParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,7 @@ constexpr FeatureBitset ImpliedFeaturesHRESET = {};

constexpr FeatureBitset ImpliedFeaturesPREFETCHI = {};
constexpr FeatureBitset ImpliedFeaturesCMPCCXADD = {};
constexpr FeatureBitset ImpliedFeaturesRAOINT = {};
constexpr FeatureBitset ImpliedFeaturesAVX512FP16 =
FeatureAVX512BW | FeatureAVX512DQ | FeatureAVX512VL;
// Key Locker Features
Expand Down
3 changes: 3 additions & 0 deletions llvm/lib/Target/X86/X86.td
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,9 @@ def FeatureAMXFP16 : SubtargetFeature<"amx-fp16", "HasAMXFP16", "true",
[FeatureAMXTILE]>;
def FeatureCMPCCXADD : SubtargetFeature<"cmpccxadd", "HasCMPCCXADD", "true",
"Support CMPCCXADD instructions">;
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",
Expand Down
59 changes: 59 additions & 0 deletions llvm/lib/Target/X86/X86ISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5642,6 +5642,23 @@ bool X86TargetLowering::getTgtMemIntrinsic(IntrinsicInfo &Info,
MachineMemOperand::MOVolatile;
return true;
}
case Intrinsic::x86_aadd32:
case Intrinsic::x86_aadd64:
case Intrinsic::x86_aand32:
case Intrinsic::x86_aand64:
case Intrinsic::x86_aor32:
case Intrinsic::x86_aor64:
case Intrinsic::x86_axor32:
case Intrinsic::x86_axor64: {
Info.opc = ISD::INTRINSIC_W_CHAIN;
Info.ptrVal = I.getArgOperand(0);
unsigned Size = I.getArgOperand(1)->getType()->getScalarSizeInBits();
Info.memVT = EVT::getIntegerVT(I.getType()->getContext(), Size);
Info.align = Align(Size);
Info.flags |= MachineMemOperand::MOLoad | MachineMemOperand::MOStore |
MachineMemOperand::MOVolatile;
return true;
}
}
return false;
}
Expand Down Expand Up @@ -28250,6 +28267,44 @@ static SDValue LowerINTRINSIC_W_CHAIN(SDValue Op, const X86Subtarget &Subtarget,
MVT::i32, MMO);
return Operation;
}
case Intrinsic::x86_aadd32:
case Intrinsic::x86_aadd64:
case Intrinsic::x86_aand32:
case Intrinsic::x86_aand64:
case Intrinsic::x86_aor32:
case Intrinsic::x86_aor64:
case Intrinsic::x86_axor32:
case Intrinsic::x86_axor64: {
SDLoc DL(Op);
SDValue Chain = Op.getOperand(0);
SDValue Op1 = Op.getOperand(2);
SDValue Op2 = Op.getOperand(3);
MVT VT = Op2.getSimpleValueType();
unsigned Opc = 0;
switch (IntNo) {
default:
llvm_unreachable("Unknown Intrinsic");
case Intrinsic::x86_aadd32:
case Intrinsic::x86_aadd64:
Opc = X86ISD::AADD;
break;
case Intrinsic::x86_aand32:
case Intrinsic::x86_aand64:
Opc = X86ISD::AAND;
break;
case Intrinsic::x86_aor32:
case Intrinsic::x86_aor64:
Opc = X86ISD::AOR;
break;
case Intrinsic::x86_axor32:
case Intrinsic::x86_axor64:
Opc = X86ISD::AXOR;
break;
}
MachineMemOperand *MMO = cast<MemSDNode>(Op)->getMemOperand();
return DAG.getMemIntrinsicNode(Opc, DL, Op->getVTList(),
{Chain, Op1, Op2}, VT, MMO);
}
}
return SDValue();
}
Expand Down Expand Up @@ -33874,6 +33929,10 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
NODE_NAME_CASE(LBTS)
NODE_NAME_CASE(LBTC)
NODE_NAME_CASE(LBTR)
NODE_NAME_CASE(AADD)
NODE_NAME_CASE(AOR)
NODE_NAME_CASE(AXOR)
NODE_NAME_CASE(AAND)
NODE_NAME_CASE(VZEXT_MOVL)
NODE_NAME_CASE(VZEXT_LOAD)
NODE_NAME_CASE(VEXTRACT_STORE)
Expand Down
7 changes: 7 additions & 0 deletions llvm/lib/Target/X86/X86ISelLowering.h
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,13 @@ namespace llvm {
LBTC,
LBTR,

/// RAO arithmetic instructions.
/// OUTCHAIN = AADD(INCHAIN, PTR, RHS)
AADD,
AOR,
AXOR,
AAND,

// Load, scalar_to_vector, and zero extend.
VZEXT_LOAD,

Expand Down
4 changes: 4 additions & 0 deletions llvm/lib/Target/X86/X86InstrInfo.td
Original file line number Diff line number Diff line change
Expand Up @@ -991,6 +991,7 @@ def HasENQCMD : Predicate<"Subtarget->hasENQCMD()">;
def HasAMXFP16 : Predicate<"Subtarget->hasAMXFP16()">;
def HasCMPCCXADD : Predicate<"Subtarget->hasCMPCCXADD()">;
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()">;
Expand Down Expand Up @@ -3239,6 +3240,9 @@ include "X86InstrKL.td"
// AMX instructions
include "X86InstrAMX.td"

// RAO-INT instructions
include "X86InstrRAOINT.td"

// System instructions.
include "X86InstrSystem.td"

Expand Down
45 changes: 45 additions & 0 deletions llvm/lib/Target/X86/X86InstrRAOINT.td
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//===---- 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 RAO-INT
// instruction set.
//
//===----------------------------------------------------------------------===//

//===----------------------------------------------------------------------===//
// RAO-INT instructions

def SDTRAOBinaryArith : SDTypeProfile<0, 2, [SDTCisPtrTy<0>, SDTCisInt<1>]>;

def X86rao_add : SDNode<"X86ISD::AADD", SDTRAOBinaryArith,
[SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
def X86rao_or : SDNode<"X86ISD::AOR", SDTRAOBinaryArith,
[SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
def X86rao_xor : SDNode<"X86ISD::AXOR", SDTRAOBinaryArith,
[SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
def X86rao_and : SDNode<"X86ISD::AAND", SDTRAOBinaryArith,
[SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;

multiclass RAOINT_BASE<string OpcodeStr> {
let Predicates = [HasRAOINT] in
def 32mr : I<0xfc, MRMDestMem, (outs), (ins i32mem:$dst, GR32:$src),
!strconcat("a", OpcodeStr, "{l}\t{$src, $dst|$dst, $src}"),
[(!cast<SDNode>("X86rao_" # OpcodeStr) addr:$dst, GR32:$src)]>,
Sched<[WriteALURMW]>;

let Predicates = [HasRAOINT, In64BitMode] in
def 64mr : I<0xfc, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src),
!strconcat("a", OpcodeStr, "{q}\t{$src, $dst|$dst, $src}"),
[(!cast<SDNode>("X86rao_" # OpcodeStr) addr:$dst, GR64:$src)]>,
Sched<[WriteALURMW]>, REX_W;
}

defm AADD : RAOINT_BASE<"add">, T8PS;
defm AAND : RAOINT_BASE<"and">, T8PD;
defm AOR : RAOINT_BASE<"or" >, T8XD;
defm AXOR : RAOINT_BASE<"xor">, T8XS;
71 changes: 71 additions & 0 deletions llvm/test/CodeGen/X86/raoint-intrinsics-32.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown --show-mc-encoding -mattr=+raoint | FileCheck %s --check-prefixes=X64
; RUN: llc < %s -verify-machineinstrs -mtriple=i686-unknown-unknown --show-mc-encoding -mattr=+raoint | FileCheck %s --check-prefixes=X86

define void @test_int_x86_aadd32(i8* %A, i32 %B) {
; X64-LABEL: test_int_x86_aadd32:
; X64: # %bb.0:
; X64-NEXT: aaddl %esi, (%rdi) # encoding: [0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
;
; X86-LABEL: test_int_x86_aadd32:
; X86: # %bb.0:
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x04]
; X86-NEXT: aaddl %eax, (%ecx) # encoding: [0x0f,0x38,0xfc,0x01]
; X86-NEXT: retl # encoding: [0xc3]
call void @llvm.x86.aadd32(i8* %A, i32 %B)
ret void
}
declare void @llvm.x86.aadd32(i8* %A, i32 %B)

define void @test_int_x86_aand32(i8* %A, i32 %B) {
; X64-LABEL: test_int_x86_aand32:
; X64: # %bb.0:
; X64-NEXT: aandl %esi, (%rdi) # encoding: [0x66,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
;
; X86-LABEL: test_int_x86_aand32:
; X86: # %bb.0:
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x04]
; X86-NEXT: aandl %eax, (%ecx) # encoding: [0x66,0x0f,0x38,0xfc,0x01]
; X86-NEXT: retl # encoding: [0xc3]
call void @llvm.x86.aand32(i8* %A, i32 %B)
ret void
}
declare void @llvm.x86.aand32(i8* %A, i32 %B)

define void @test_int_x86_aor32(i8* %A, i32 %B) {
; X64-LABEL: test_int_x86_aor32:
; X64: # %bb.0:
; X64-NEXT: aorl %esi, (%rdi) # encoding: [0xf2,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
;
; X86-LABEL: test_int_x86_aor32:
; X86: # %bb.0:
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x04]
; X86-NEXT: aorl %eax, (%ecx) # encoding: [0xf2,0x0f,0x38,0xfc,0x01]
; X86-NEXT: retl # encoding: [0xc3]
call void @llvm.x86.aor32(i8* %A, i32 %B)
ret void
}
declare void @llvm.x86.aor32(i8* %A, i32 %B)

define void @test_int_x86_axor32(i8* %A, i32 %B) {
; X64-LABEL: test_int_x86_axor32:
; X64: # %bb.0:
; X64-NEXT: axorl %esi, (%rdi) # encoding: [0xf3,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
;
; X86-LABEL: test_int_x86_axor32:
; X86: # %bb.0:
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx # encoding: [0x8b,0x4c,0x24,0x04]
; X86-NEXT: axorl %eax, (%ecx) # encoding: [0xf3,0x0f,0x38,0xfc,0x01]
; X86-NEXT: retl # encoding: [0xc3]
call void @llvm.x86.axor32(i8* %A, i32 %B)
ret void
}
declare void @llvm.x86.axor32(i8* %A, i32 %B)
42 changes: 42 additions & 0 deletions llvm/test/CodeGen/X86/raoint-intrinsics-64.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown --show-mc-encoding -mattr=+raoint | FileCheck %s --check-prefixes=X64

define void @test_int_x86_aadd64(i8* %A, i64 %B) {
; X64-LABEL: test_int_x86_aadd64:
; X64: # %bb.0:
; X64-NEXT: aaddq %rsi, (%rdi) # encoding: [0x48,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
call void @llvm.x86.aadd64(i8* %A, i64 %B)
ret void
}
declare void @llvm.x86.aadd64(i8* %A, i64 %B)

define void @test_int_x86_aand64(i8* %A, i64 %B) {
; X64-LABEL: test_int_x86_aand64:
; X64: # %bb.0:
; X64-NEXT: aandq %rsi, (%rdi) # encoding: [0x66,0x48,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
call void @llvm.x86.aand64(i8* %A, i64 %B)
ret void
}
declare void @llvm.x86.aand64(i8* %A, i64 %B)

define void @test_int_x86_aor64(i8* %A, i64 %B) {
; X64-LABEL: test_int_x86_aor64:
; X64: # %bb.0:
; X64-NEXT: aorq %rsi, (%rdi) # encoding: [0xf2,0x48,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
call void @llvm.x86.aor64(i8* %A, i64 %B)
ret void
}
declare void @llvm.x86.aor64(i8* %A, i64 %B)

define void @test_int_x86_axor64(i8* %A, i64 %B) {
; X64-LABEL: test_int_x86_axor64:
; X64: # %bb.0:
; X64-NEXT: axorq %rsi, (%rdi) # encoding: [0xf3,0x48,0x0f,0x38,0xfc,0x37]
; X64-NEXT: retq # encoding: [0xc3]
call void @llvm.x86.axor64(i8* %A, i64 %B)
ret void
}
declare void @llvm.x86.axor64(i8* %A, i64 %B)
98 changes: 98 additions & 0 deletions llvm/test/MC/Disassembler/X86/rao-int.txt
Original file line number Diff line number Diff line change
@@ -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
194 changes: 194 additions & 0 deletions llvm/test/MC/Disassembler/X86/x86-64-rao-int.txt
Original file line number Diff line number Diff line change
@@ -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
97 changes: 97 additions & 0 deletions llvm/test/MC/X86/rao-int-att.s
Original file line number Diff line number Diff line change
@@ -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)
97 changes: 97 additions & 0 deletions llvm/test/MC/X86/rao-int-intel.s
Original file line number Diff line number Diff line change
@@ -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
193 changes: 193 additions & 0 deletions llvm/test/MC/X86/x86-64-rao-int-att.s
Original file line number Diff line number Diff line change
@@ -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)
193 changes: 193 additions & 0 deletions llvm/test/MC/X86/x86-64-rao-int-intel.s
Original file line number Diff line number Diff line change
@@ -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