Skip to content

Commit f79afd4

Browse files
committed
Support encoding/decoding for NEG/NOT
1 parent f0e17f0 commit f79afd4

File tree

9 files changed

+630
-27
lines changed

9 files changed

+630
-27
lines changed

llvm/lib/Target/X86/X86InstrArithmetic.td

Lines changed: 112 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -363,38 +363,52 @@ class BinOpAIF_AF<bits<8> o, string m, X86TypeInfo t, Register areg,
363363
// UnaryOpR - Instructions that read "reg".
364364
class UnaryOpR<bits<8> o, Format f, string m, string args, X86TypeInfo t,
365365
dag out, list<dag> p>
366-
: ITy<o, f, t, out, (ins t.RegClass:$src), m, args, p>, Sched<[WriteALU]>;
366+
: ITy<o, f, t, out, (ins t.RegClass:$src1), m, args, p>, Sched<[WriteALU]>;
367367
// UnaryOpR_R - Instructions that read "reg" and write "reg".
368368
class UnaryOpR_R<bits<8> o, Format f, string m, X86TypeInfo t,
369-
SDPatternOperator node>
370-
: UnaryOpR<o, f, m, unaryop_args, t, (outs t.RegClass:$dst),
371-
[(set t.RegClass:$dst, (node t.RegClass:$src))]>;
369+
SDPatternOperator node, bit ndd = 0>
370+
: UnaryOpR<o, f, m, !if(!eq(ndd, 0), unaryop_args, unaryop_ndd_args), t,
371+
(outs t.RegClass:$dst),
372+
[(set t.RegClass:$dst, (node t.RegClass:$src1))]>, NDD<ndd>;
372373
// UnaryOpR_RF - Instructions that read "reg" and write "reg"/EFLAGS.
373374
class UnaryOpR_RF<bits<8> o, Format f, string m, X86TypeInfo t,
374-
SDPatternOperator node>
375-
: UnaryOpR<o, f, m, unaryop_args, t, (outs t.RegClass:$dst),
376-
[(set t.RegClass:$dst, (node t.RegClass:$src)),
377-
(implicit EFLAGS)]>, DefEFLAGS;
375+
SDPatternOperator node, bit ndd = 0>
376+
: UnaryOpR<o, f, m, !if(!eq(ndd, 0), unaryop_args, unaryop_ndd_args), t,
377+
(outs t.RegClass:$dst),
378+
[(set t.RegClass:$dst, (node t.RegClass:$src1)),
379+
(implicit EFLAGS)]>, DefEFLAGS, NDD<ndd>;
378380

379381
// UnaryOpM - Instructions that read "[mem]".
380382
class UnaryOpM<bits<8> o, Format f, string m, string args, X86TypeInfo t,
381383
dag out, list<dag> p>
382-
: ITy<o, f, t, out, (ins t.MemOperand:$src), m, args, p> {
384+
: ITy<o, f, t, out, (ins t.MemOperand:$src1), m, args, p> {
383385
let mayLoad = 1;
384386
}
387+
// UnaryOpM_R - Instructions that read "[mem]" and writes "reg".
388+
class UnaryOpM_R<bits<8> o, Format f, string m, X86TypeInfo t,
389+
SDPatternOperator node>
390+
: UnaryOpM<o, f, m, unaryop_ndd_args, t, (outs t.RegClass:$dst),
391+
[(set t.RegClass:$dst, (node (t.LoadNode addr:$src1)))]>,
392+
Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, NDD<1>;
393+
// UnaryOpM_RF - Instructions that read "[mem]" and writes "reg"/EFLAGS.
394+
class UnaryOpM_RF<bits<8> o, Format f, string m, X86TypeInfo t,
395+
SDPatternOperator node>
396+
: UnaryOpM<o, f, m, unaryop_ndd_args, t, (outs t.RegClass:$dst),
397+
[(set t.RegClass:$dst, EFLAGS, (node (t.LoadNode addr:$src1)))]>,
398+
Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, DefEFLAGS, NDD<1>;
385399
// UnaryOpM_M - Instructions that read "[mem]" and writes "[mem]".
386400
class UnaryOpM_M<bits<8> o, Format f, string m, X86TypeInfo t,
387401
SDPatternOperator node>
388402
: UnaryOpM<o, f, m, unaryop_args, t, (outs),
389-
[(store (node (t.LoadNode addr:$src)), addr:$src)]>,
403+
[(store (node (t.LoadNode addr:$src1)), addr:$src1)]>,
390404
Sched<[WriteALURMW]>{
391405
let mayStore = 1;
392406
}
393407
// UnaryOpM_MF - Instructions that read "[mem]" and writes "[mem]"/EFLAGS.
394408
class UnaryOpM_MF<bits<8> o, Format f, string m, X86TypeInfo t,
395409
SDPatternOperator node>
396410
: UnaryOpM<o, f, m, unaryop_args, t, (outs),
397-
[(store (node (t.LoadNode addr:$src)), addr:$src),
411+
[(store (node (t.LoadNode addr:$src1)), addr:$src1),
398412
(implicit EFLAGS)]>, Sched<[WriteALURMW]>, DefEFLAGS {
399413
let mayStore = 1;
400414
}
@@ -404,13 +418,13 @@ class UnaryOpM_MF<bits<8> o, Format f, string m, X86TypeInfo t,
404418
//
405419
class MulDivOpR<bits<8> o, Format f, string m, X86TypeInfo t,
406420
X86FoldableSchedWrite sched, list<dag> p>
407-
: UnaryOpR<o, f, m, "$src", t, (outs), p> {
421+
: UnaryOpR<o, f, m, "$src1", t, (outs), p> {
408422
let SchedRW = [sched];
409423
}
410424

411425
class MulDivOpM<bits<8> o, Format f, string m, X86TypeInfo t,
412426
X86FoldableSchedWrite sched, list<dag> p>
413-
: UnaryOpM<o, f, m, "$src", t, (outs), p> {
427+
: UnaryOpM<o, f, m, "$src1", t, (outs), p> {
414428
let SchedRW =
415429
[sched.Folded,
416430
// Memory operand.
@@ -428,7 +442,7 @@ multiclass Mul<bits<8> o, string m, Format RegMRM, Format MemMRM, SDPatternOpera
428442
// syntax can be accepted.
429443
let Defs = [AL,EFLAGS,AX], Uses = [AL] in
430444
def 8r : MulDivOpR<o, RegMRM, m, Xi8, WriteIMul8,
431-
[(set AL, (node AL, GR8:$src)), (implicit EFLAGS)]>;
445+
[(set AL, (node AL, GR8:$src1)), (implicit EFLAGS)]>;
432446
let Defs = [AX,DX,EFLAGS], Uses = [AX] in
433447
def 16r : MulDivOpR<o, RegMRM, m, Xi16, WriteIMul16, []>, OpSize16;
434448
let Defs = [EAX,EDX,EFLAGS], Uses = [EAX] in
@@ -437,7 +451,7 @@ multiclass Mul<bits<8> o, string m, Format RegMRM, Format MemMRM, SDPatternOpera
437451
def 64r : MulDivOpR<o, RegMRM, m, Xi64, WriteIMul64, []>;
438452
let Defs = [AL,EFLAGS,AX], Uses = [AL] in
439453
def 8m : MulDivOpM<o, MemMRM, m, Xi8, WriteIMul8,
440-
[(set AL, (node AL, (loadi8 addr:$src))), (implicit EFLAGS)]>;
454+
[(set AL, (node AL, (loadi8 addr:$src1))), (implicit EFLAGS)]>;
441455
let Defs = [AX,DX,EFLAGS], Uses = [AX] in
442456
def 16m : MulDivOpM<o, MemMRM, m, Xi16, WriteIMul16, []>, OpSize16;
443457
let Defs = [EAX,EDX,EFLAGS], Uses = [EAX] in
@@ -543,26 +557,26 @@ def IMUL64rmi32 : IMulOpMI_R<Xi64, WriteIMul64Imm>;
543557
//
544558
class IncOpR_RF<X86TypeInfo t> : UnaryOpR_RF<0xFF, MRM0r, "inc", t, null_frag> {
545559
let Pattern = [(set t.RegClass:$dst, EFLAGS,
546-
(X86add_flag_nocf t.RegClass:$src, 1))];
560+
(X86add_flag_nocf t.RegClass:$src1, 1))];
547561
}
548562
class DecOpR_RF<X86TypeInfo t> : UnaryOpR_RF<0xFF, MRM1r, "dec", t, null_frag> {
549563
let Pattern = [(set t.RegClass:$dst, EFLAGS,
550-
(X86sub_flag_nocf t.RegClass:$src, 1))];
564+
(X86sub_flag_nocf t.RegClass:$src1, 1))];
551565
}
552566
class IncOpM_M<X86TypeInfo t> : UnaryOpM_MF<0xFF, MRM0m, "inc", t, null_frag> {
553-
let Pattern = [(store (add (t.LoadNode addr:$src), 1), addr:$src),
567+
let Pattern = [(store (add (t.LoadNode addr:$src1), 1), addr:$src1),
554568
(implicit EFLAGS)];
555569
}
556570
class DecOpM_M<X86TypeInfo t> : UnaryOpM_MF<0xFF, MRM1m, "dec", t, null_frag> {
557-
let Pattern = [(store (add (t.LoadNode addr:$src), -1), addr:$src),
571+
let Pattern = [(store (add (t.LoadNode addr:$src1), -1), addr:$src1),
558572
(implicit EFLAGS)];
559573
}
560574
// IncDec_Alt - Instructions like "inc reg" short forms.
561575
// Short forms only valid in 32-bit mode. Selected during MCInst lowering.
562576
class IncDec_Alt<bits<8> o, string m, X86TypeInfo t>
563577
: UnaryOpR_RF<o, AddRegFrm, m, t, null_frag>, Requires<[Not64BitMode]>;
564578

565-
let Constraints = "$src = $dst", isConvertibleToThreeAddress = 1 in {
579+
let isConvertibleToThreeAddress = 1 in {
566580
def INC16r_alt : IncDec_Alt<0x40, "inc", Xi16>, OpSize16;
567581
def INC32r_alt : IncDec_Alt<0x40, "inc", Xi32>, OpSize32;
568582
def DEC16r_alt : IncDec_Alt<0x48, "dec", Xi16>, OpSize16;
@@ -592,34 +606,108 @@ def DEC64m : DecOpM_M<Xi64>;
592606
//===----------------------------------------------------------------------===//
593607
// NEG and NOT Instructions
594608
//
595-
class NegOpR_RF<X86TypeInfo t> : UnaryOpR_RF<0xF7, MRM3r, "neg", t, ineg>;
609+
class NegOpR_R<X86TypeInfo t, bit ndd = 0>
610+
: UnaryOpR_R<0xF7, MRM3r, "neg", t, ineg, ndd>;
611+
class NegOpR_RF<X86TypeInfo t, bit ndd = 0>
612+
: UnaryOpR_RF<0xF7, MRM3r, "neg", t, ineg, ndd>;
613+
class NegOpM_M<X86TypeInfo t> : UnaryOpM_M<0xF7, MRM3m, "neg", t, null_frag>;
596614
class NegOpM_MF<X86TypeInfo t> : UnaryOpM_MF<0xF7, MRM3m, "neg", t, ineg>;
615+
class NegOpM_R<X86TypeInfo t> : UnaryOpM_R<0xF7, MRM3m, "neg", t, null_frag>;
616+
class NegOpM_RF<X86TypeInfo t> : UnaryOpM_RF<0xF7, MRM3m, "neg", t, ineg>;
597617

598-
class NotOpR_R<X86TypeInfo t> : UnaryOpR_R<0xF7, MRM2r, "not", t, not>;
618+
class NotOpR_R<X86TypeInfo t, bit ndd = 0>
619+
: UnaryOpR_R<0xF7, MRM2r, "not", t, not, ndd>;
599620
class NotOpM_M<X86TypeInfo t> : UnaryOpM_M<0xF7, MRM2m, "not", t, not>;
621+
class NotOpM_R<X86TypeInfo t> : UnaryOpM_R<0xF7, MRM2m, "not", t, not>;
600622

601-
let Constraints = "$src = $dst" in {
623+
let Predicates = [NoNDD] in {
602624
def NEG8r : NegOpR_RF<Xi8>;
603625
def NEG16r : NegOpR_RF<Xi16>, OpSize16;
604626
def NEG32r : NegOpR_RF<Xi32>, OpSize32;
605627
def NEG64r : NegOpR_RF<Xi64>;
606-
607628
def NOT8r : NotOpR_R<Xi8>;
608629
def NOT16r : NotOpR_R<Xi16>, OpSize16;
609630
def NOT32r : NotOpR_R<Xi32>, OpSize32;
610631
def NOT64r : NotOpR_R<Xi64>;
611632
}
612633

634+
let Predicates = [HasNDD, In64BitMode] in {
635+
def NEG8r_ND : NegOpR_RF<Xi8, 1>;
636+
def NEG16r_ND : NegOpR_RF<Xi16, 1>, PD;
637+
def NEG32r_ND : NegOpR_RF<Xi32, 1>;
638+
def NEG64r_ND : NegOpR_RF<Xi64, 1>;
639+
640+
def NOT8r_ND : NotOpR_R<Xi8, 1>;
641+
def NOT16r_ND : NotOpR_R<Xi16, 1>, PD;
642+
def NOT32r_ND : NotOpR_R<Xi32, 1>;
643+
def NOT64r_ND : NotOpR_R<Xi64, 1>;
644+
645+
def NEG8r_NF_ND : NegOpR_R<Xi8, 1>, EVEX_NF;
646+
def NEG16r_NF_ND : NegOpR_R<Xi16, 1>, EVEX_NF, PD;
647+
def NEG32r_NF_ND : NegOpR_R<Xi32, 1>, EVEX_NF;
648+
def NEG64r_NF_ND : NegOpR_R<Xi64, 1>, EVEX_NF;
649+
}
650+
613651
def NEG8m : NegOpM_MF<Xi8>;
614652
def NEG16m : NegOpM_MF<Xi16>, OpSize16;
615653
def NEG32m : NegOpM_MF<Xi32>, OpSize32;
616654
def NEG64m : NegOpM_MF<Xi64>, Requires<[In64BitMode]>;
617655

656+
let Predicates = [HasNDD, In64BitMode] in {
657+
def NEG8m_ND : NegOpM_RF<Xi8>;
658+
def NEG16m_ND : NegOpM_RF<Xi16>, PD;
659+
def NEG32m_ND : NegOpM_RF<Xi32>;
660+
def NEG64m_ND : NegOpM_RF<Xi64>;
661+
662+
def NEG8m_NF_ND : NegOpM_R<Xi8>, EVEX_NF;
663+
def NEG16m_NF_ND : NegOpM_R<Xi16>, EVEX_NF, PD;
664+
def NEG32m_NF_ND : NegOpM_R<Xi32>, EVEX_NF;
665+
def NEG64m_NF_ND : NegOpM_R<Xi64>, EVEX_NF;
666+
}
667+
618668
def NOT8m : NotOpM_M<Xi8>;
619669
def NOT16m : NotOpM_M<Xi16>, OpSize16;
620670
def NOT32m : NotOpM_M<Xi32>, OpSize32;
621671
def NOT64m : NotOpM_M<Xi64>, Requires<[In64BitMode]>;
622672

673+
let Predicates = [HasNDD, In64BitMode] in {
674+
def NOT8m_ND : NotOpM_R<Xi8>;
675+
def NOT16m_ND : NotOpM_R<Xi16>, PD;
676+
def NOT32m_ND : NotOpM_R<Xi32>;
677+
def NOT64m_ND : NotOpM_R<Xi64>;
678+
}
679+
680+
let Predicates = [In64BitMode], Pattern = [(null_frag)] in {
681+
def NEG8r_NF : NegOpR_R<Xi8>, NF;
682+
def NEG16r_NF : NegOpR_R<Xi16>, NF, PD;
683+
def NEG32r_NF : NegOpR_R<Xi32>, NF;
684+
def NEG64r_NF : NegOpR_R<Xi64>, NF;
685+
def NEG8m_NF : NegOpM_M<Xi8>, NF;
686+
def NEG16m_NF : NegOpM_M<Xi16>, NF, PD;
687+
def NEG32m_NF : NegOpM_M<Xi32>, NF;
688+
def NEG64m_NF : NegOpM_M<Xi64>, NF;
689+
690+
def NEG8r_EVEX : NegOpR_RF<Xi8>, PL;
691+
def NEG16r_EVEX : NegOpR_RF<Xi16>, PL, PD;
692+
def NEG32r_EVEX : NegOpR_RF<Xi32>, PL;
693+
def NEG64r_EVEX : NegOpR_RF<Xi64>, PL;
694+
695+
def NOT8r_EVEX : NotOpR_R<Xi8>, PL;
696+
def NOT16r_EVEX : NotOpR_R<Xi16>, PL, PD;
697+
def NOT32r_EVEX : NotOpR_R<Xi32>, PL;
698+
def NOT64r_EVEX : NotOpR_R<Xi64>, PL;
699+
700+
def NEG8m_EVEX : NegOpM_MF<Xi8>, PL;
701+
def NEG16m_EVEX : NegOpM_MF<Xi16>, PL, PD;
702+
def NEG32m_EVEX : NegOpM_MF<Xi32>, PL;
703+
def NEG64m_EVEX : NegOpM_MF<Xi64>, PL;
704+
705+
def NOT8m_EVEX : NotOpM_M<Xi8>, PL;
706+
def NOT16m_EVEX : NotOpM_M<Xi16>, PL, PD;
707+
def NOT32m_EVEX : NotOpM_M<Xi32>, PL;
708+
def NOT64m_EVEX : NotOpM_M<Xi64>, PL;
709+
}
710+
623711
/// ArithBinOp_RF - This is an arithmetic binary operator where the pattern is
624712
/// defined with "(set GPR:$dst, EFLAGS, (...".
625713
///

llvm/lib/Target/X86/X86InstrUtils.td

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -956,14 +956,15 @@ class ITy<bits<8> o, Format f, X86TypeInfo t, dag outs, dag ins, string m,
956956
let hasREX_W = t.HasREX_W;
957957
}
958958

959-
defvar unaryop_args = "$src";
959+
defvar unaryop_args = "$src1";
960+
defvar unaryop_ndd_args = "{$src1, $dst|$dst, $src1}";
960961
defvar binop_args = "{$src2, $src1|$src1, $src2}";
961962
defvar binop_ndd_args = "{$src2, $src1, $dst|$dst, $src1, $src2}";
962-
defvar binop_constraint = "$src1 = $dst";
963+
defvar tie_dst_src1 = "$src1 = $dst";
963964

964965
// NDD - Helper for new data destination instructions
965966
class NDD<bit ndd> {
966-
string Constraints = !if(!eq(ndd, 0), binop_constraint, "");
967+
string Constraints = !if(!eq(ndd, 0), tie_dst_src1, "");
967968
Encoding OpEnc = !if(!eq(ndd, 0), EncNormal, EncEVEX);
968969
bit hasEVEX_B = ndd;
969970
bit hasVEX_4V = ndd;
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT
2+
# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL
3+
4+
# ATT: {evex} negb %bl
5+
# INTEL: {evex} neg bl
6+
0x62,0xf4,0x7c,0x08,0xf6,0xdb
7+
8+
# ATT: {nf} negb %bl
9+
# INTEL: {nf} neg bl
10+
0x62,0xf4,0x7c,0x0c,0xf6,0xdb
11+
12+
# ATT: negb %bl, %bl
13+
# INTEL: neg bl, bl
14+
0x62,0xf4,0x64,0x18,0xf6,0xdb
15+
16+
# ATT: {nf} negb %bl, %bl
17+
# INTEL: {nf} neg bl, bl
18+
0x62,0xf4,0x64,0x1c,0xf6,0xdb
19+
20+
# ATT: {evex} negw %dx
21+
# INTEL: {evex} neg dx
22+
0x62,0xf4,0x7d,0x08,0xf7,0xda
23+
24+
# ATT: {nf} negw %dx
25+
# INTEL: {nf} neg dx
26+
0x62,0xf4,0x7d,0x0c,0xf7,0xda
27+
28+
# ATT: negw %dx, %dx
29+
# INTEL: neg dx, dx
30+
0x62,0xf4,0x6d,0x18,0xf7,0xda
31+
32+
# ATT: {nf} negw %dx, %dx
33+
# INTEL: {nf} neg dx, dx
34+
0x62,0xf4,0x6d,0x1c,0xf7,0xda
35+
36+
# ATT: {evex} negl %ecx
37+
# INTEL: {evex} neg ecx
38+
0x62,0xf4,0x7c,0x08,0xf7,0xd9
39+
40+
# ATT: {nf} negl %ecx
41+
# INTEL: {nf} neg ecx
42+
0x62,0xf4,0x7c,0x0c,0xf7,0xd9
43+
44+
# ATT: negl %ecx, %ecx
45+
# INTEL: neg ecx, ecx
46+
0x62,0xf4,0x74,0x18,0xf7,0xd9
47+
48+
# ATT: {nf} negl %ecx, %ecx
49+
# INTEL: {nf} neg ecx, ecx
50+
0x62,0xf4,0x74,0x1c,0xf7,0xd9
51+
52+
# ATT: {evex} negq %r9
53+
# INTEL: {evex} neg r9
54+
0x62,0xd4,0xfc,0x08,0xf7,0xd9
55+
56+
# ATT: {nf} negq %r9
57+
# INTEL: {nf} neg r9
58+
0x62,0xd4,0xfc,0x0c,0xf7,0xd9
59+
60+
# ATT: negq %r9, %r9
61+
# INTEL: neg r9, r9
62+
0x62,0xd4,0xb4,0x18,0xf7,0xd9
63+
64+
# ATT: {nf} negq %r9, %r9
65+
# INTEL: {nf} neg r9, r9
66+
0x62,0xd4,0xb4,0x1c,0xf7,0xd9
67+
68+
# ATT: {evex} negb 291(%r8,%rax,4)
69+
# INTEL: {evex} neg byte ptr [r8 + 4*rax + 291]
70+
0x62,0xd4,0x7c,0x08,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00
71+
72+
# ATT: {nf} negb 291(%r8,%rax,4)
73+
# INTEL: {nf} neg byte ptr [r8 + 4*rax + 291]
74+
0x62,0xd4,0x7c,0x0c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00
75+
76+
# ATT: negb 291(%r8,%rax,4), %bl
77+
# INTEL: neg bl, byte ptr [r8 + 4*rax + 291]
78+
0x62,0xd4,0x64,0x18,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00
79+
80+
# ATT: {nf} negb 291(%r8,%rax,4), %bl
81+
# INTEL: {nf} neg bl, byte ptr [r8 + 4*rax + 291]
82+
0x62,0xd4,0x64,0x1c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00
83+
84+
# ATT: {evex} negw 291(%r8,%rax,4)
85+
# INTEL: {evex} neg word ptr [r8 + 4*rax + 291]
86+
0x62,0xd4,0x7d,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
87+
88+
# ATT: {nf} negw 291(%r8,%rax,4)
89+
# INTEL: {nf} neg word ptr [r8 + 4*rax + 291]
90+
0x62,0xd4,0x7d,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
91+
92+
# ATT: negw 291(%r8,%rax,4), %dx
93+
# INTEL: neg dx, word ptr [r8 + 4*rax + 291]
94+
0x62,0xd4,0x6d,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
95+
96+
# ATT: {nf} negw 291(%r8,%rax,4), %dx
97+
# INTEL: {nf} neg dx, word ptr [r8 + 4*rax + 291]
98+
0x62,0xd4,0x6d,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
99+
100+
# ATT: {evex} negl 291(%r8,%rax,4)
101+
# INTEL: {evex} neg dword ptr [r8 + 4*rax + 291]
102+
0x62,0xd4,0x7c,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
103+
104+
# ATT: {nf} negl 291(%r8,%rax,4)
105+
# INTEL: {nf} neg dword ptr [r8 + 4*rax + 291]
106+
0x62,0xd4,0x7c,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
107+
108+
# ATT: negl 291(%r8,%rax,4), %ecx
109+
# INTEL: neg ecx, dword ptr [r8 + 4*rax + 291]
110+
0x62,0xd4,0x74,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
111+
112+
# ATT: {nf} negl 291(%r8,%rax,4), %ecx
113+
# INTEL: {nf} neg ecx, dword ptr [r8 + 4*rax + 291]
114+
0x62,0xd4,0x74,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
115+
116+
# ATT: {evex} negq 291(%r8,%rax,4)
117+
# INTEL: {evex} neg qword ptr [r8 + 4*rax + 291]
118+
0x62,0xd4,0xfc,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
119+
120+
# ATT: {nf} negq 291(%r8,%rax,4)
121+
# INTEL: {nf} neg qword ptr [r8 + 4*rax + 291]
122+
0x62,0xd4,0xfc,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
123+
124+
# ATT: negq 291(%r8,%rax,4), %r9
125+
# INTEL: neg r9, qword ptr [r8 + 4*rax + 291]
126+
0x62,0xd4,0xb4,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00
127+
128+
# ATT: {nf} negq 291(%r8,%rax,4), %r9
129+
# INTEL: {nf} neg r9, qword ptr [r8 + 4*rax + 291]
130+
0x62,0xd4,0xb4,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00

0 commit comments

Comments
 (0)