# SPDX-License-Identifier: MIT
# Copyright (C) 2018-present iced project and contributors

# one byte too long
26 26 26 26 26 26 26 26 26 26 26 26 26 26 01 CE, INVALID, INVALID, 0, code=Add_rm32_r32

# max length
26 26 26 26 26 26 26 26 26 26 26 26 26 01 CE, Add_rm32_r32, Add, 2, op0=r;esi op1=r;ecx es: enc=2601CE

# not enough bytes
, INVALID, INVALID, 0, code=INVALID err=NoMoreBytes
66, INVALID, INVALID, 0, code=INVALID err=NoMoreBytes
01, INVALID, INVALID, 0, code=Add_rm32_r32 err=NoMoreBytes
# Mov_r16_imm16, missing 1 byte (immediate)
66 B8 5A, INVALID, INVALID, 0, code=Mov_r16_imm16 err=NoMoreBytes
# Mov_r32_imm32, missing 1-3 bytes (immediate)
B8 5AA512, INVALID, INVALID, 0, code=Mov_r32_imm32 err=NoMoreBytes
B8 5AA5, INVALID, INVALID, 0, code=Mov_r32_imm32 err=NoMoreBytes
B8 5A, INVALID, INVALID, 0, code=Mov_r32_imm32 err=NoMoreBytes

# NoMoreBytes has higher prio than InvalidInstruction
F0 04, INVALID, INVALID, 0, code=Add_AL_imm8 err=NoMoreBytes

# Verify that 16-bit vsib addressing is invalid
67 C4E249 90 54 01, INVALID, INVALID, 0, code=VEX_Vpgatherdd_xmm_vm32x_xmm
67 C4E249 90 54 01, VEX_Vpgatherdd_xmm_vm32x_xmm, Vpgatherdd, 3, op0=r;xmm2 op1=m;ds;si;;1;1;1;Int32 op2=r;xmm6 vsib32 co=0;0;0;0;6;1 decopt=NoInvalidCheck noencode
C4E249 90 00, INVALID, INVALID, 0, code=VEX_Vpgatherdd_xmm_vm32x_xmm
C4E249 90 00, VEX_Vpgatherdd_xmm_vm32x_xmm, Vpgatherdd, 3, op0=r;xmm0 op1=m;ds;eax;;1;0;0;Int32 op2=r;xmm6 vsib32 co=0;0;0;0;0;0 decopt=NoInvalidCheck noencode
67 62 F27D0B 90 54 01, INVALID, INVALID, 0, code=EVEX_Vpgatherdd_xmm_k1_vm32x
67 62 F27D0B 90 54 01, EVEX_Vpgatherdd_xmm_k1_vm32x, Vpgatherdd, 2, op0=r;xmm2 op1=m;ds;si;;1;4;1;Int32 k3 vsib32 co=0;0;0;0;7;1 decopt=NoInvalidCheck noencode
62 F27D0B 90 00, INVALID, INVALID, 0, code=EVEX_Vpgatherdd_xmm_k1_vm32x
62 F27D0B 90 00, EVEX_Vpgatherdd_xmm_k1_vm32x, Vpgatherdd, 2, op0=r;xmm0 op1=m;ds;eax;;1;0;0;Int32 k3 vsib32 co=0;0;0;0;0;0 decopt=NoInvalidCheck noencode

# prefix: double 66
66 66 01 CE, Add_rm16_r16, Add, 2, op0=r;si op1=r;cx enc=6601CE

# prefix: double 67
67 67 8D 18, Lea_r32_m, Lea, 2, op0=r;ebx op1=m;ds;bx;si;1;0;0;Unknown enc=678D18

# prefix: extra segment prefixes
26 26 01 18, Add_rm32_r32, Add, 2, op0=m;es;eax;;1;0;0;UInt32 op1=r;ebx es: enc=260118
26 2E 01 18, Add_rm32_r32, Add, 2, op0=m;cs;eax;;1;0;0;UInt32 op1=r;ebx cs: enc=2E0118
26 36 01 18, Add_rm32_r32, Add, 2, op0=m;ss;eax;;1;0;0;UInt32 op1=r;ebx ss: enc=360118
26 3E 01 18, Add_rm32_r32, Add, 2, op0=m;ds;eax;;1;0;0;UInt32 op1=r;ebx ds: enc=3E0118
26 64 01 18, Add_rm32_r32, Add, 2, op0=m;fs;eax;;1;0;0;UInt32 op1=r;ebx fs: enc=640118
26 65 01 18, Add_rm32_r32, Add, 2, op0=m;gs;eax;;1;0;0;UInt32 op1=r;ebx gs: enc=650118

2E 26 01 18, Add_rm32_r32, Add, 2, op0=m;es;eax;;1;0;0;UInt32 op1=r;ebx es: enc=260118
2E 2E 01 18, Add_rm32_r32, Add, 2, op0=m;cs;eax;;1;0;0;UInt32 op1=r;ebx cs: enc=2E0118
2E 36 01 18, Add_rm32_r32, Add, 2, op0=m;ss;eax;;1;0;0;UInt32 op1=r;ebx ss: enc=360118
2E 3E 01 18, Add_rm32_r32, Add, 2, op0=m;ds;eax;;1;0;0;UInt32 op1=r;ebx ds: enc=3E0118
2E 64 01 18, Add_rm32_r32, Add, 2, op0=m;fs;eax;;1;0;0;UInt32 op1=r;ebx fs: enc=640118
2E 65 01 18, Add_rm32_r32, Add, 2, op0=m;gs;eax;;1;0;0;UInt32 op1=r;ebx gs: enc=650118

36 26 01 18, Add_rm32_r32, Add, 2, op0=m;es;eax;;1;0;0;UInt32 op1=r;ebx es: enc=260118
36 2E 01 18, Add_rm32_r32, Add, 2, op0=m;cs;eax;;1;0;0;UInt32 op1=r;ebx cs: enc=2E0118
36 36 01 18, Add_rm32_r32, Add, 2, op0=m;ss;eax;;1;0;0;UInt32 op1=r;ebx ss: enc=360118
36 3E 01 18, Add_rm32_r32, Add, 2, op0=m;ds;eax;;1;0;0;UInt32 op1=r;ebx ds: enc=3E0118
36 64 01 18, Add_rm32_r32, Add, 2, op0=m;fs;eax;;1;0;0;UInt32 op1=r;ebx fs: enc=640118
36 65 01 18, Add_rm32_r32, Add, 2, op0=m;gs;eax;;1;0;0;UInt32 op1=r;ebx gs: enc=650118

3E 26 01 18, Add_rm32_r32, Add, 2, op0=m;es;eax;;1;0;0;UInt32 op1=r;ebx es: enc=260118
3E 2E 01 18, Add_rm32_r32, Add, 2, op0=m;cs;eax;;1;0;0;UInt32 op1=r;ebx cs: enc=2E0118
3E 36 01 18, Add_rm32_r32, Add, 2, op0=m;ss;eax;;1;0;0;UInt32 op1=r;ebx ss: enc=360118
3E 3E 01 18, Add_rm32_r32, Add, 2, op0=m;ds;eax;;1;0;0;UInt32 op1=r;ebx ds: enc=3E0118
3E 64 01 18, Add_rm32_r32, Add, 2, op0=m;fs;eax;;1;0;0;UInt32 op1=r;ebx fs: enc=640118
3E 65 01 18, Add_rm32_r32, Add, 2, op0=m;gs;eax;;1;0;0;UInt32 op1=r;ebx gs: enc=650118

64 26 01 18, Add_rm32_r32, Add, 2, op0=m;es;eax;;1;0;0;UInt32 op1=r;ebx es: enc=260118
64 2E 01 18, Add_rm32_r32, Add, 2, op0=m;cs;eax;;1;0;0;UInt32 op1=r;ebx cs: enc=2E0118
64 36 01 18, Add_rm32_r32, Add, 2, op0=m;ss;eax;;1;0;0;UInt32 op1=r;ebx ss: enc=360118
64 3E 01 18, Add_rm32_r32, Add, 2, op0=m;ds;eax;;1;0;0;UInt32 op1=r;ebx ds: enc=3E0118
64 64 01 18, Add_rm32_r32, Add, 2, op0=m;fs;eax;;1;0;0;UInt32 op1=r;ebx fs: enc=640118
64 65 01 18, Add_rm32_r32, Add, 2, op0=m;gs;eax;;1;0;0;UInt32 op1=r;ebx gs: enc=650118

65 26 01 18, Add_rm32_r32, Add, 2, op0=m;es;eax;;1;0;0;UInt32 op1=r;ebx es: enc=260118
65 2E 01 18, Add_rm32_r32, Add, 2, op0=m;cs;eax;;1;0;0;UInt32 op1=r;ebx cs: enc=2E0118
65 36 01 18, Add_rm32_r32, Add, 2, op0=m;ss;eax;;1;0;0;UInt32 op1=r;ebx ss: enc=360118
65 3E 01 18, Add_rm32_r32, Add, 2, op0=m;ds;eax;;1;0;0;UInt32 op1=r;ebx ds: enc=3E0118
65 64 01 18, Add_rm32_r32, Add, 2, op0=m;fs;eax;;1;0;0;UInt32 op1=r;ebx fs: enc=640118
65 65 01 18, Add_rm32_r32, Add, 2, op0=m;gs;eax;;1;0;0;UInt32 op1=r;ebx gs: enc=650118
