Files
FEX-Emu--FEX/unittests/InstructionCountCI/FlagM/FlagOpts.json
T
2026-09-04 07:32:09 +02:00

389 lines
8.7 KiB
JSON

{
"Features": {
"EnabledHostFeatures": [
"FLAGM",
"FLAGM2"
],
"DisabledHostFeatures": [
"SVE128",
"SVE256",
"AFP"
],
"BinaryCacheVersion": 12
},
"Instructions": {
"Chained add": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 5,
"x86Insts": [
"add rax, rbx",
"adc rcx, rcx"
],
"ExpectedArm64ASM": [
"adds x4, x4, x6",
"mov w27, #0x0",
"adcs x26, x7, x7",
"cfinv",
"mov x7, x26"
]
},
"Chained sub": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 4,
"x86Insts": [
"sub rax, rbx",
"sbb rcx, rdx"
],
"ExpectedArm64ASM": [
"subs x4, x4, x6",
"eor x27, x7, x5",
"sbcs x26, x7, x5",
"mov x7, x26"
]
},
"Inverted add": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 4,
"x86Insts": [
"add rax, rbx",
"adc rcx, rdx",
"cmc"
],
"ExpectedArm64ASM": [
"adds x4, x4, x6",
"eor x27, x7, x5",
"adcs x26, x7, x5",
"mov x7, x26"
]
},
"Inverted sub": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 5,
"x86Insts": [
"sub rax, rbx",
"sbb rcx, rcx",
"cmc"
],
"ExpectedArm64ASM": [
"subs x4, x4, x6",
"mov w27, #0x0",
"sbcs x26, x7, x7",
"mov x7, x26",
"cfinv"
]
},
"ADC dead": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 3,
"x86Insts": [
"add rax, rbx",
"adc rcx, rcx",
"test rcx, rcx"
],
"ExpectedArm64ASM": [
"adds x4, x4, x6",
"adc x7, x7, x7",
"subs x26, x7, #0x0 (0)"
]
},
"INC consumed": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 6,
"x86Insts": [
"add rax, rbx",
"inc rax"
],
"ExpectedArm64ASM": [
"adds x4, x4, x6",
"cset x20, lo",
"adds x26, x4, #0x1 (1)",
"rmif x20, #63, #nzCv",
"mov x27, x4",
"mov x4, x26"
]
},
"INC dead": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 4,
"x86Insts": [
"add rax, rbx",
"inc rax",
"test rax, rdx"
],
"ExpectedArm64ASM": [
"add x4, x4, x6",
"add x4, x4, #0x1 (1)",
"ands x26, x4, x5",
"cfinv"
]
},
"DEC consumed": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 6,
"x86Insts": [
"sub rax, rbx",
"dec rax"
],
"ExpectedArm64ASM": [
"subs x4, x4, x6",
"cset x20, hs",
"subs x26, x4, #0x1 (1)",
"rmif x20, #63, #nzCv",
"mov x27, x4",
"mov x4, x26"
]
},
"DEC dead": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 4,
"x86Insts": [
"sub rax, rbx",
"dec rax",
"test rax, rcx"
],
"ExpectedArm64ASM": [
"sub x4, x4, x6",
"sub x4, x4, #0x1 (1)",
"ands x26, x4, x7",
"cfinv"
]
},
"8-bit DEC consumed": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 11,
"x86Insts": [
"sub al, ah",
"dec al"
],
"ExpectedArm64ASM": [
"lsr w20, w4, #8",
"lsl w0, w4, #24",
"cmp w0, w20, lsl #24",
"sub w20, w4, w20",
"bfxil x4, x20, #0, #8",
"uxtb w27, w4",
"sub w26, w27, #0x1 (1)",
"setf8 w26",
"bic w20, w27, w26",
"rmif x20, #7, #nzcV",
"bfxil x4, x26, #0, #8"
]
},
"8-bit DEC dead": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 9,
"x86Insts": [
"sub al, ah",
"dec al",
"test al, al"
],
"ExpectedArm64ASM": [
"lsr w20, w4, #8",
"sub w20, w4, w20",
"bfxil x4, x20, #0, #8",
"uxtb w20, w4",
"sub w20, w20, #0x1 (1)",
"bfxil x4, x20, #0, #8",
"cmn wzr, w4, lsl #24",
"cfinv",
"mov x26, x4"
]
},
"Variable shift dead": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 3,
"x86Insts": [
"sar rax, cl",
"test rax, rdx"
],
"ExpectedArm64ASM": [
"asr x4, x4, x7",
"ands x26, x4, x5",
"cfinv"
]
},
"Variable rotate-through-carry dead": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 11,
"x86Insts": [
"rcr rax, cl",
"test rax, rdx"
],
"ExpectedArm64ASM": [
"and x20, x7, #0x3f",
"cbz x20, #+0x20",
"lsr x20, x4, x7",
"cset x21, lo",
"neg x22, x7",
"lsl x23, x4, x22",
"orr x20, x20, x23, lsl #1",
"lsl x21, x21, x22",
"orr x4, x20, x21",
"ands x26, x4, x5",
"cfinv"
]
},
"Partial NZCV select (cmp)": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 6,
"x86Insts": [
"cmp rax, rbx",
"setz cl",
"test cl, cl"
],
"ExpectedArm64ASM": [
"cmp x4, x6",
"cset x20, eq",
"bfxil x7, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"Partial NZCV select (add)": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 6,
"x86Insts": [
"add rax, rbx",
"setz cl",
"test cl, cl"
],
"ExpectedArm64ASM": [
"adds x4, x4, x6",
"cset x20, eq",
"bfxil x7, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"AND use only ZF": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 6,
"x86Insts": [
"and eax, ebx",
"setz cl",
"test cl, cl"
],
"ExpectedArm64ASM": [
"ands w4, w4, w6",
"cset x20, eq",
"bfxil x7, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"AND use only PF": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 10,
"x86Insts": [
"and eax, ebx",
"setp cl",
"test cl, cl"
],
"ExpectedArm64ASM": [
"and w26, w4, w6",
"mov x4, x26",
"eor w0, w26, w26, lsr #4",
"eor w0, w0, w0, lsr #2",
"eon w20, w0, w0, lsr #1",
"and w20, w20, #0x1",
"bfxil x7, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"UCOMISS use only PF": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 4,
"x86Insts": [
"ucomiss xmm0, xmm1",
"setnp cl",
"test rax, rax"
],
"ExpectedArm64ASM": [
"fcmp s16, s17",
"cset x26, vc",
"bfxil x7, x26, #0, #8",
"subs x26, x4, #0x0 (0)"
]
},
"Test use only zero - self 16-bit": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 6,
"x86Insts": [
"test ax, ax",
"setz al",
"test cl, cl"
],
"ExpectedArm64ASM": [
"tst w4, #0xffff",
"cset x20, eq",
"bfxil x4, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"Test use only zero - non constant 16-bit": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 7,
"x86Insts": [
"test ax, bx",
"setz al",
"test cl, cl"
],
"ExpectedArm64ASM": [
"and w0, w4, w6",
"tst w0, #0xffff",
"cset x20, eq",
"bfxil x4, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"Test use only zero - constant 8-bit": {
"x86InstructionCount": 3,
"ExpectedInstructionCount": 8,
"x86Insts": [
"test al, 137",
"setnz al",
"test cl, cl"
],
"ExpectedArm64ASM": [
"mov w20, #0x89",
"and w0, w4, w20",
"tst w0, #0xff",
"cset x20, ne",
"bfxil x4, x20, #0, #8",
"cmn wzr, w7, lsl #24",
"cfinv",
"mov x26, x7"
]
},
"Dead cmpxchg flags": {
"x86InstructionCount": 2,
"ExpectedInstructionCount": 10,
"x86Insts": [
"cmpxchg8b [rbp]",
"test rax, rax"
],
"ExpectedArm64ASM": [
"mov x20, x4",
"mov x21, x5",
"caspal w20, w21, w6, w7, [x9]",
"mrs x0, nzcv",
"cmp w20, w4",
"ccmp w21, w5, #nzcv, eq",
"rmif x0, #28, #NzCV",
"csel x4, x20, x4, ne",
"csel x5, x21, x5, ne",
"subs x26, x4, #0x0 (0)"
]
}
}
}