mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 13:00:15 +02:00
4706 lines
121 KiB
JSON
4706 lines
121 KiB
JSON
{
|
|
"Features": {
|
|
"Bitness": 64,
|
|
"EnabledHostFeatures": [],
|
|
"DisabledHostFeatures": [
|
|
"SVE128",
|
|
"SVE256"
|
|
]
|
|
},
|
|
"Comment": [
|
|
"MMX instructions are defined as optimal without SRA being used for these instructions.",
|
|
"Could remove a bunch of instructions if those are under SRA",
|
|
"Vector shifts by vector elements can be optimized with SVE wide element shifts",
|
|
"Vector multiply returning high can be optimized with SVE"
|
|
],
|
|
"Instructions": {
|
|
"femms": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x0b",
|
|
"ExpectedArm64ASM": [
|
|
"mov w20, #0x0",
|
|
"strb w20, [x28, #1010]"
|
|
]
|
|
},
|
|
"movups xmm0, [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x10",
|
|
"ExpectedArm64ASM": [
|
|
"ldr q16, [x4]"
|
|
]
|
|
},
|
|
"movups [rax], xmm0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x11",
|
|
"ExpectedArm64ASM": [
|
|
"str q16, [x4]"
|
|
]
|
|
},
|
|
"movlps xmm0, [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x12",
|
|
"ExpectedArm64ASM": [
|
|
"ld1 {v16.d}[0], [x4]"
|
|
]
|
|
},
|
|
"movlps [rax], xmm0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x13",
|
|
"ExpectedArm64ASM": [
|
|
"str d16, [x4]"
|
|
]
|
|
},
|
|
"movhlps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x12",
|
|
"ExpectedArm64ASM": [
|
|
"mov v16.d[0], v17.d[1]"
|
|
]
|
|
},
|
|
"unpcklps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x14",
|
|
"ExpectedArm64ASM": [
|
|
"zip1 v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"unpckhps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x15",
|
|
"ExpectedArm64ASM": [
|
|
"zip2 v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"movhps xmm0, [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x16",
|
|
"ExpectedArm64ASM": [
|
|
"ld1 {v16.d}[1], [x4]"
|
|
]
|
|
},
|
|
"movlhps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x16",
|
|
"ExpectedArm64ASM": [
|
|
"mov v16.d[1], v17.d[0]"
|
|
]
|
|
},
|
|
"movhps [rax], xmm0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x17",
|
|
"ExpectedArm64ASM": [
|
|
"st1 {v16.d}[1], [x4]"
|
|
]
|
|
},
|
|
"nop": {
|
|
"ExpectedInstructionCount": 0,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x19",
|
|
"ExpectedArm64ASM": []
|
|
},
|
|
"movaps xmm0, [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x28",
|
|
"ExpectedArm64ASM": [
|
|
"ldr q16, [x4]"
|
|
]
|
|
},
|
|
"movaps [rax], xmm0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x29",
|
|
"ExpectedArm64ASM": [
|
|
"str q16, [x4]"
|
|
]
|
|
},
|
|
"cvtpi2ps xmm0, [rax]": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"With AFP mode FEX can remove an insert after the operation.",
|
|
"0x0f 0x2a"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"scvtf v2.4s, v2.4s",
|
|
"mov v16.d[0], v2.d[0]"
|
|
]
|
|
},
|
|
"cvtpi2ps xmm0, mm0": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"With AFP mode FEX can remove an insert after the operation.",
|
|
"0x0f 0x2a"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"scvtf v2.4s, v2.4s",
|
|
"mov v16.d[0], v2.d[0]"
|
|
]
|
|
},
|
|
"movntps [rax], xmm0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x2b",
|
|
"ExpectedArm64ASM": [
|
|
"str q16, [x4]"
|
|
]
|
|
},
|
|
"cvttps2pi mm0, [rax]": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x2c",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"fcvtzs v2.2s, v2.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"cvttps2pi mm0, xmm0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x2c",
|
|
"ExpectedArm64ASM": [
|
|
"fcvtzs v2.2s, v16.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"cvtps2pi mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x2d",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"frinti v2.2s, v2.2s",
|
|
"fcvtzs v2.2s, v2.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"cvtps2pi mm0, xmm0": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x2d",
|
|
"ExpectedArm64ASM": [
|
|
"frinti v2.2s, v16.2s",
|
|
"fcvtzs v2.2s, v2.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"ucomiss xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 19,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x2e",
|
|
"ExpectedArm64ASM": [
|
|
"fcmp s16, s17",
|
|
"cset x20, eq",
|
|
"csinc x20, x20, xzr, vc",
|
|
"cset x1, lt",
|
|
"bfi x20, x1, #1, #1",
|
|
"cset x1, vs",
|
|
"bfi x20, x1, #2, #1",
|
|
"ubfx x21, x20, #1, #1",
|
|
"ubfx x22, x20, #0, #1",
|
|
"ubfx x20, x20, #2, #1",
|
|
"lsl x21, x21, #29",
|
|
"orr w21, w21, w22, lsl #30",
|
|
"eor w20, w20, #0x1",
|
|
"strb w20, [x28, #706]",
|
|
"mov w20, #0x0",
|
|
"mov w22, #0x90000000",
|
|
"bic x21, x21, x22",
|
|
"strb w20, [x28, #708]",
|
|
"str w21, [x28, #728]"
|
|
]
|
|
},
|
|
"comiss xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 22,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x2f",
|
|
"ExpectedArm64ASM": [
|
|
"fcmp s16, s17",
|
|
"cset x20, eq",
|
|
"csinc x20, x20, xzr, vc",
|
|
"cset x1, lt",
|
|
"bfi x20, x1, #1, #1",
|
|
"cset x1, vs",
|
|
"bfi x20, x1, #2, #1",
|
|
"ubfx x21, x20, #1, #1",
|
|
"ubfx x22, x20, #0, #1",
|
|
"ubfx x20, x20, #2, #1",
|
|
"ldr w23, [x28, #728]",
|
|
"mov w0, w23",
|
|
"bfi w0, w21, #29, #1",
|
|
"mov w21, w0",
|
|
"bfi w21, w22, #30, #1",
|
|
"eor w20, w20, #0x1",
|
|
"strb w20, [x28, #706]",
|
|
"mov w20, #0x0",
|
|
"mov w22, #0x90000000",
|
|
"bic x21, x21, x22",
|
|
"strb w20, [x28, #708]",
|
|
"str w21, [x28, #728]"
|
|
]
|
|
},
|
|
"rdtsc": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x31",
|
|
"ExpectedArm64ASM": [
|
|
"mrs x20, S3_3_c14_c0_2",
|
|
"ubfx x4, x20, #0, #32",
|
|
"lsr x6, x20, #32"
|
|
]
|
|
},
|
|
"cmovo ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x40",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #28, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, ne",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovo eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x40",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #28, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, ne",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovo rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x40",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #28, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, ne",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovno ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x41",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #28, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovno eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x41",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #28, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovno rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x41",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #28, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovb ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x42",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #29, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, ne",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovb eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x42",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #29, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, ne",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovb rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x42",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #29, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, ne",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnb ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x43",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #29, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnb eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x43",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #29, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnb rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x43",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #29, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovz ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x44",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, ne",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovz eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x44",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, ne",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovz rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x44",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, ne",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnz ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x45",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnz eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x45",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnz rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x45",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovbe ax, bx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x46",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"ubfx w24, w22, #29, #1",
|
|
"orr w23, w23, w24",
|
|
"cmp x23, #0x1 (1)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovbe eax, ebx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x46",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"ubfx w24, w22, #29, #1",
|
|
"orr w23, w23, w24",
|
|
"cmp x23, #0x1 (1)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovbe rax, rbx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x46",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"ubfx w22, w20, #29, #1",
|
|
"orr w21, w21, w22",
|
|
"cmp x21, #0x1 (1)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnbe ax, bx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x47",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"ubfx w24, w22, #29, #1",
|
|
"orr w23, w23, w24",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnbe eax, ebx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x47",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"ubfx w24, w22, #29, #1",
|
|
"orr w23, w23, w24",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnbe rax, rbx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x47",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"ubfx w22, w20, #29, #1",
|
|
"orr w21, w21, w22",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovs ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x48",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, ne",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovs eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x48",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, ne",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovs rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x48",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, ne",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovns ax, bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x49",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovns eax, ebx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x49",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"cmp x23, #0x0 (0)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovns rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x49",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovpe ax, bx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4a",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldrb w22, [x28, #706]",
|
|
"mov w23, #0x1",
|
|
"eor w22, w22, #0x1",
|
|
"fmov s2, w22",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w22, v2.b[0]",
|
|
"and x22, x23, x22",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel w20, w20, w21, ne",
|
|
"bfxil x4, x20, #0, #16"
|
|
]
|
|
},
|
|
"cmovpe eax, ebx": {
|
|
"ExpectedInstructionCount": 11,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4a",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldrb w22, [x28, #706]",
|
|
"mov w23, #0x1",
|
|
"eor w22, w22, #0x1",
|
|
"fmov s2, w22",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w22, v2.b[0]",
|
|
"and x22, x23, x22",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel w4, w20, w21, ne"
|
|
]
|
|
},
|
|
"cmovpe rax, rbx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4a",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w20, [x28, #706]",
|
|
"mov w21, #0x1",
|
|
"eor w20, w20, #0x1",
|
|
"fmov s2, w20",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w20, v2.b[0]",
|
|
"and x20, x21, x20",
|
|
"cmp x20, #0x0 (0)",
|
|
"csel x4, x7, x4, ne"
|
|
]
|
|
},
|
|
"cmovnp ax, bx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4b",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldrb w22, [x28, #706]",
|
|
"mov w23, #0x1",
|
|
"eor w22, w22, #0x1",
|
|
"fmov s2, w22",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w22, v2.b[0]",
|
|
"and x22, x23, x22",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16"
|
|
]
|
|
},
|
|
"cmovnp eax, ebx": {
|
|
"ExpectedInstructionCount": 11,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4b",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldrb w22, [x28, #706]",
|
|
"mov w23, #0x1",
|
|
"eor w22, w22, #0x1",
|
|
"fmov s2, w22",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w22, v2.b[0]",
|
|
"and x22, x23, x22",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel w4, w20, w21, eq"
|
|
]
|
|
},
|
|
"cmovnp rax, rbx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4b",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w20, [x28, #706]",
|
|
"mov w21, #0x1",
|
|
"eor w20, w20, #0x1",
|
|
"fmov s2, w20",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w20, v2.b[0]",
|
|
"and x20, x21, x20",
|
|
"cmp x20, #0x0 (0)",
|
|
"csel x4, x7, x4, eq"
|
|
]
|
|
},
|
|
"cmovl ax, bx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4c",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"ubfx w24, w22, #28, #1",
|
|
"cmp w23, w24",
|
|
"csel w20, w20, w21, ne",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovl eax, ebx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4c",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"ubfx w24, w22, #28, #1",
|
|
"cmp w23, w24",
|
|
"csel w4, w20, w21, ne",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovl rax, rbx": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x4c",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"ubfx w22, w20, #28, #1",
|
|
"cmp w21, w22",
|
|
"csel x4, x7, x4, ne",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnl ax, bx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4d",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"ubfx w24, w22, #28, #1",
|
|
"cmp w23, w24",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnl eax, ebx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4d",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"lsr w23, w22, #31",
|
|
"ubfx w24, w22, #28, #1",
|
|
"cmp w23, w24",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnl rax, rbx": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x4d",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"ubfx w22, w20, #28, #1",
|
|
"cmp w21, w22",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovle ax, bx": {
|
|
"ExpectedInstructionCount": 15,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4e",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"lsr w24, w22, #31",
|
|
"ubfx w25, w22, #28, #1",
|
|
"cmp x23, #0x1 (1)",
|
|
"cset x23, eq",
|
|
"cmp w24, w25",
|
|
"cset x24, ne",
|
|
"orr x23, x23, x24",
|
|
"cmp x23, #0x1 (1)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovle eax, ebx": {
|
|
"ExpectedInstructionCount": 14,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4e",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"lsr w24, w22, #31",
|
|
"ubfx w25, w22, #28, #1",
|
|
"cmp x23, #0x1 (1)",
|
|
"cset x23, eq",
|
|
"cmp w24, w25",
|
|
"cset x24, ne",
|
|
"orr x23, x23, x24",
|
|
"cmp x23, #0x1 (1)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovle rax, rbx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4e",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"lsr w22, w20, #31",
|
|
"ubfx w23, w20, #28, #1",
|
|
"cmp x21, #0x1 (1)",
|
|
"cset x21, eq",
|
|
"cmp w22, w23",
|
|
"cset x22, ne",
|
|
"orr x21, x21, x22",
|
|
"cmp x21, #0x1 (1)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnle ax, bx": {
|
|
"ExpectedInstructionCount": 15,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4f",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"lsr w24, w22, #31",
|
|
"ubfx w25, w22, #28, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"cset x23, eq",
|
|
"cmp w24, w25",
|
|
"cset x24, eq",
|
|
"and x23, x23, x24",
|
|
"cmp x23, #0x1 (1)",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnle eax, ebx": {
|
|
"ExpectedInstructionCount": 14,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4f",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"ldr w22, [x28, #728]",
|
|
"ubfx w23, w22, #30, #1",
|
|
"lsr w24, w22, #31",
|
|
"ubfx w25, w22, #28, #1",
|
|
"cmp x23, #0x0 (0)",
|
|
"cset x23, eq",
|
|
"cmp w24, w25",
|
|
"cset x24, eq",
|
|
"and x23, x23, x24",
|
|
"cmp x23, #0x1 (1)",
|
|
"csel w4, w20, w21, eq",
|
|
"str w22, [x28, #728]"
|
|
]
|
|
},
|
|
"cmovnle rax, rbx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x4f",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"lsr w22, w20, #31",
|
|
"ubfx w23, w20, #28, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"cmp w22, w23",
|
|
"cset x22, eq",
|
|
"and x21, x21, x22",
|
|
"cmp x21, #0x1 (1)",
|
|
"csel x4, x7, x4, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"movmskps eax, xmm0": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x50",
|
|
"ExpectedArm64ASM": [
|
|
"ushr v2.4s, v16.4s, #31",
|
|
"ldr x0, [x28, #1600]",
|
|
"ldr q3, [x0]",
|
|
"ushl v2.4s, v2.4s, v3.4s",
|
|
"addv s2, v2.4s",
|
|
"mov w4, v2.s[0]"
|
|
]
|
|
},
|
|
"movmskps rax, xmm0": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x50",
|
|
"ExpectedArm64ASM": [
|
|
"ushr v2.4s, v16.4s, #31",
|
|
"ldr x0, [x28, #1600]",
|
|
"ldr q3, [x0]",
|
|
"ushl v2.4s, v2.4s, v3.4s",
|
|
"addv s2, v2.4s",
|
|
"mov w4, v2.s[0]"
|
|
]
|
|
},
|
|
"sqrtps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x51",
|
|
"ExpectedArm64ASM": [
|
|
"fsqrt v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"rsqrtps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"FEAT_FPRES could make this more optimal",
|
|
"0x0f 0x52"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"fmov v0.4s, #0x70 (1.0000)",
|
|
"fsqrt v1.4s, v17.4s",
|
|
"fdiv v16.4s, v0.4s, v1.4s"
|
|
]
|
|
},
|
|
"rcpps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"FEAT_FPRES could make this more optimal",
|
|
"0x0f 0x53"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"fmov v0.4s, #0x70 (1.0000)",
|
|
"fdiv v16.4s, v0.4s, v17.4s"
|
|
]
|
|
},
|
|
"andps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x54",
|
|
"ExpectedArm64ASM": [
|
|
"and v16.16b, v16.16b, v17.16b"
|
|
]
|
|
},
|
|
"andnps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x55",
|
|
"ExpectedArm64ASM": [
|
|
"bic v16.16b, v17.16b, v16.16b"
|
|
]
|
|
},
|
|
"orps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x56",
|
|
"ExpectedArm64ASM": [
|
|
"orr v16.16b, v16.16b, v17.16b"
|
|
]
|
|
},
|
|
"xorps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x57",
|
|
"ExpectedArm64ASM": [
|
|
"eor v16.16b, v16.16b, v17.16b"
|
|
]
|
|
},
|
|
"addps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x58",
|
|
"ExpectedArm64ASM": [
|
|
"fadd v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"mulps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x59",
|
|
"ExpectedArm64ASM": [
|
|
"fmul v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"cvtps2pd xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5a",
|
|
"ExpectedArm64ASM": [
|
|
"fcvtl v16.2d, v17.2s"
|
|
]
|
|
},
|
|
"cvtps2pd xmm0, [rax]": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5a",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"fcvtl v16.2d, v2.2s"
|
|
]
|
|
},
|
|
"cvtdq2ps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5b",
|
|
"ExpectedArm64ASM": [
|
|
"scvtf v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"subps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5c",
|
|
"ExpectedArm64ASM": [
|
|
"fsub v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"minps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5d",
|
|
"ExpectedArm64ASM": [
|
|
"fcmgt v0.4s, v17.4s, v16.4s",
|
|
"bif v16.16b, v17.16b, v0.16b"
|
|
]
|
|
},
|
|
"divps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5e",
|
|
"ExpectedArm64ASM": [
|
|
"fdiv v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"maxps xmm0, xmm1": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x5f",
|
|
"ExpectedArm64ASM": [
|
|
"fcmgt v0.4s, v17.4s, v16.4s",
|
|
"bit v16.16b, v17.16b, v0.16b"
|
|
]
|
|
},
|
|
"punpcklbw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x60",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip1 v2.8b, v2.8b, v3.8b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpcklbw mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x60",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip1 v2.8b, v2.8b, v3.8b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpcklwd mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x61",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip1 v2.4h, v2.4h, v3.4h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpcklwd mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x61",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip1 v2.4h, v2.4h, v3.4h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckldq mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x62",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip1 v2.2s, v2.2s, v3.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckldq mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x62",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip1 v2.2s, v2.2s, v3.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"packsswb mm0, mm1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x63",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip1 v2.2d, v2.2d, v3.2d",
|
|
"sqxtn v2.8b, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"packsswb mm0, [rax]": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x63",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip1 v2.2d, v2.2d, v3.2d",
|
|
"sqxtn v2.8b, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"packsswb mm0, mm0": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x63",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"zip1 v2.2d, v2.2d, v2.2d",
|
|
"sqxtn v2.8b, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pcmpgtb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x64",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"cmgt v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pcmpgtw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x65",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"cmgt v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pcmpgtd mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x66",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"cmgt v2.4s, v3.4s, v2.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckhbw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x68",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip2 v2.8b, v2.8b, v3.8b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckhbw mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x68",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip2 v2.8b, v2.8b, v3.8b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckhwd mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x69",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip2 v2.4h, v2.4h, v3.4h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckhwd mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x69",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip2 v2.4h, v2.4h, v3.4h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckhdq mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6a",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip2 v2.2s, v2.2s, v3.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"punpckhdq mm0, [rax]": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6a",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x4]",
|
|
"zip2 v2.2s, v2.2s, v3.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"packssdw mm0, mm1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6b",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"zip1 v2.2d, v2.2d, v3.2d",
|
|
"sqxtn v2.4h, v2.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"movd mm0, eax": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6e",
|
|
"ExpectedArm64ASM": [
|
|
"fmov s2, w4",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"movd mm0, [rax]": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6e",
|
|
"ExpectedArm64ASM": [
|
|
"ldr s2, [x4]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"movq mm0, mm0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x6f",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"movq mm0, mm1": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6f",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"movq mm0, [rax]": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x6f",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pshufw mm0, mm1, 0": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x70",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"dup v2.8h, v2.h[0]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pshufw mm0, [rax], 0": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x70",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"dup v2.8h, v2.h[0]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pshufw mm0, mm1, 1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x70",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr x0, [x28, #1616]",
|
|
"ldr d3, [x0, #16]",
|
|
"tbl v2.8b, {v2.16b}, v3.8b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pshufw mm0, [rax], 1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x70",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"ldr x0, [x28, #1616]",
|
|
"ldr d3, [x0, #16]",
|
|
"tbl v2.8b, {v2.16b}, v3.8b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pshufw mm0, mm1, 0xff": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x70",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"dup v2.8h, v2.h[3]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pshufw mm0, [rax], 0xff": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x70",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x4]",
|
|
"dup v2.8h, v2.h[3]",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pcmpeqb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x74",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"cmeq v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pcmpeqw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x75",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"cmeq v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pcmpeqd mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x76",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"cmeq v2.4s, v3.4s, v2.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"emms": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x77",
|
|
"ExpectedArm64ASM": [
|
|
"mov w20, #0x0",
|
|
"strb w20, [x28, #1010]"
|
|
]
|
|
},
|
|
"movd eax, mm0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x7e",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"mov w4, v2.s[0]"
|
|
]
|
|
},
|
|
"movd [rax], mm0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x7e",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"str s2, [x4]"
|
|
]
|
|
},
|
|
"db 0x0f, 0x7f, 0xc1": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"movq mm0, mm1",
|
|
"Manual encoded since nasm would encode 0x6f version",
|
|
"0x0f 0x7f"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"str d2, [x28, #768]"
|
|
]
|
|
},
|
|
"movq [rax], mm0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x7f",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"str d2, [x4]"
|
|
]
|
|
},
|
|
"seto al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x90",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #28, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, ne",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setno al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x91",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #28, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setb al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x92",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #29, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, ne",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setnb al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x93",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #29, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setz al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x94",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, ne",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setnz al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x95",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setbe al": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x96",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"ubfx w22, w20, #29, #1",
|
|
"orr w21, w21, w22",
|
|
"cmp x21, #0x1 (1)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setnbe al": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x97",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"ubfx w22, w20, #29, #1",
|
|
"orr w21, w21, w22",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"sets al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x98",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, ne",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setns al": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x99",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setpe al": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x9a",
|
|
"ExpectedArm64ASM": [
|
|
"mov w20, #0x1",
|
|
"ldrb w21, [x28, #706]",
|
|
"eor w21, w21, #0x1",
|
|
"fmov s2, w21",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w21, v2.b[0]",
|
|
"and x20, x20, x21",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x20, ne",
|
|
"bfxil x4, x20, #0, #8"
|
|
]
|
|
},
|
|
"setnp al": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0x9b",
|
|
"ExpectedArm64ASM": [
|
|
"mov w20, #0x1",
|
|
"ldrb w21, [x28, #706]",
|
|
"eor w21, w21, #0x1",
|
|
"fmov s2, w21",
|
|
"cnt v2.16b, v2.16b",
|
|
"umov w21, v2.b[0]",
|
|
"and x20, x20, x21",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"bfxil x4, x20, #0, #8"
|
|
]
|
|
},
|
|
"setl al": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x9c",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"ubfx w22, w20, #28, #1",
|
|
"cmp w21, w22",
|
|
"cset x21, ne",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setnl al": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x9d",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"lsr w21, w20, #31",
|
|
"ubfx w22, w20, #28, #1",
|
|
"cmp w21, w22",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setle al": {
|
|
"ExpectedInstructionCount": 13,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x9e",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"lsr w22, w20, #31",
|
|
"ubfx w23, w20, #28, #1",
|
|
"cmp x21, #0x1 (1)",
|
|
"cset x21, eq",
|
|
"cmp w22, w23",
|
|
"cset x22, ne",
|
|
"orr x21, x21, x22",
|
|
"cmp x21, #0x1 (1)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"setnle al": {
|
|
"ExpectedInstructionCount": 13,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0x9f",
|
|
"ExpectedArm64ASM": [
|
|
"ldr w20, [x28, #728]",
|
|
"ubfx w21, w20, #30, #1",
|
|
"lsr w22, w20, #31",
|
|
"ubfx w23, w20, #28, #1",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x21, eq",
|
|
"cmp w22, w23",
|
|
"cset x22, eq",
|
|
"and x21, x21, x22",
|
|
"cmp x21, #0x1 (1)",
|
|
"cset x21, eq",
|
|
"bfxil x4, x21, #0, #8",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"push fs": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xa0",
|
|
"ExpectedArm64ASM": [
|
|
"ldr x20, [x28, #176]",
|
|
"str x20, [x8, #-8]!"
|
|
]
|
|
},
|
|
"pop fs": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa1",
|
|
"ExpectedArm64ASM": [
|
|
"ldr x20, [x8]",
|
|
"add x8, x8, #0x8 (8)",
|
|
"strh w20, [x28, #146]",
|
|
"ubfx w20, w20, #3, #13",
|
|
"add x0, x28, x20, lsl #2",
|
|
"ldr w20, [x0, #880]",
|
|
"str w20, [x28, #176]"
|
|
]
|
|
},
|
|
"bt ax, bx": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa3",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"and x20, x20, #0xf",
|
|
"lsr x20, x4, x20",
|
|
"ubfx x20, x20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bt [rax], bx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa3",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #13",
|
|
"ldrb w20, [x4, x20, sxtx]",
|
|
"lsr w20, w20, w21",
|
|
"ubfx w20, w20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bt eax, ebx": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa3",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"and x20, x20, #0x1f",
|
|
"lsr x20, x4, x20",
|
|
"ubfx x20, x20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bt [rax], ebx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa3",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #29",
|
|
"ldrb w20, [x4, x20, sxtx]",
|
|
"lsr w20, w20, w21",
|
|
"ubfx w20, w20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bt rax, rbx": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa3",
|
|
"ExpectedArm64ASM": [
|
|
"and x20, x7, #0x3f",
|
|
"lsr x20, x4, x20",
|
|
"ubfx x20, x20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bt [rax], rbx": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa3",
|
|
"ExpectedArm64ASM": [
|
|
"ubfx x20, x7, #0, #3",
|
|
"asr x21, x7, #3",
|
|
"ldrb w21, [x4, x21, sxtx]",
|
|
"lsr w20, w21, w20",
|
|
"ubfx w20, w20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld ax, bx, 0": {
|
|
"ExpectedInstructionCount": 0,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": []
|
|
},
|
|
"shld ax, bx, 1": {
|
|
"ExpectedInstructionCount": 18,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"lsl x22, x21, #1",
|
|
"lsr w20, w20, #15",
|
|
"orr x20, x22, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"lsl w22, w20, #16",
|
|
"and w22, w22, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x23, eq",
|
|
"orr w22, w22, w23, lsl #30",
|
|
"ubfx w23, w21, #15, #1",
|
|
"orr w22, w22, w23, lsl #29",
|
|
"strb w20, [x28, #706]",
|
|
"eor w20, w20, w21",
|
|
"ubfx w20, w20, #15, #1",
|
|
"orr w20, w22, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld ax, bx, 15": {
|
|
"ExpectedInstructionCount": 15,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"lsl x22, x21, #15",
|
|
"lsr w20, w20, #1",
|
|
"orr x20, x22, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"lsl w22, w20, #16",
|
|
"and w22, w22, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x23, eq",
|
|
"orr w22, w22, w23, lsl #30",
|
|
"ubfx w21, w21, #1, #1",
|
|
"orr w21, w22, w21, lsl #29",
|
|
"strb w20, [x28, #706]",
|
|
"str w21, [x28, #728]"
|
|
]
|
|
},
|
|
"shld ax, bx, 16": {
|
|
"ExpectedInstructionCount": 14,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"lsl x22, x21, #16",
|
|
"orr x20, x22, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"lsl w22, w20, #16",
|
|
"and w22, w22, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x23, eq",
|
|
"orr w22, w22, w23, lsl #30",
|
|
"ubfx w21, w21, #0, #1",
|
|
"orr w21, w22, w21, lsl #29",
|
|
"strb w20, [x28, #706]",
|
|
"str w21, [x28, #728]"
|
|
]
|
|
},
|
|
"shld ax, bx, 31": {
|
|
"ExpectedInstructionCount": 15,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"lsl x22, x21, #31",
|
|
"lsr w20, w20, #17",
|
|
"orr x20, x22, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"lsl w22, w20, #16",
|
|
"and w22, w22, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x23, eq",
|
|
"orr w22, w22, w23, lsl #30",
|
|
"ubfx w21, w21, #1, #1",
|
|
"orr w21, w22, w21, lsl #29",
|
|
"strb w20, [x28, #706]",
|
|
"str w21, [x28, #728]"
|
|
]
|
|
},
|
|
"shld eax, ebx, 0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w4, w4, #0"
|
|
]
|
|
},
|
|
"shld eax, ebx, 1": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"extr w4, w21, w20, #31",
|
|
"tst w4, w4",
|
|
"mrs x20, nzcv",
|
|
"lsr w22, w21, #31",
|
|
"orr w20, w20, w22, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"eor w21, w4, w21",
|
|
"lsr w21, w21, #31",
|
|
"orr w20, w20, w21, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld eax, ebx, 15": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"extr w4, w21, w20, #17",
|
|
"tst w4, w4",
|
|
"mrs x20, nzcv",
|
|
"ubfx w21, w21, #17, #1",
|
|
"orr w20, w20, w21, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld eax, ebx, 16": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"extr w4, w21, w20, #16",
|
|
"tst w4, w4",
|
|
"mrs x20, nzcv",
|
|
"ubfx w21, w21, #16, #1",
|
|
"orr w20, w20, w21, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld eax, ebx, 31": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"extr w4, w21, w20, #1",
|
|
"tst w4, w4",
|
|
"mrs x20, nzcv",
|
|
"ubfx w21, w21, #1, #1",
|
|
"orr w20, w20, w21, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld rax, rbx, 0": {
|
|
"ExpectedInstructionCount": 0,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": []
|
|
},
|
|
"shld rax, rbx, 1": {
|
|
"ExpectedInstructionCount": 11,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"extr x4, x20, x7, #63",
|
|
"tst x4, x4",
|
|
"mrs x21, nzcv",
|
|
"lsr x22, x20, #63",
|
|
"orr w21, w21, w22, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"eor x20, x4, x20",
|
|
"lsr x20, x20, #63",
|
|
"orr w20, w21, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld rax, rbx, 15": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"extr x4, x20, x7, #49",
|
|
"tst x4, x4",
|
|
"mrs x21, nzcv",
|
|
"ubfx x20, x20, #49, #1",
|
|
"orr w20, w21, w20, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld rax, rbx, 32": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"extr x4, x20, x7, #32",
|
|
"tst x4, x4",
|
|
"mrs x21, nzcv",
|
|
"ubfx x20, x20, #32, #1",
|
|
"orr w20, w21, w20, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld rax, rbx, 63": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xac",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"extr x4, x20, x7, #1",
|
|
"tst x4, x4",
|
|
"mrs x21, nzcv",
|
|
"ubfx x20, x20, #1, #1",
|
|
"orr w20, w21, w20, lsl #29",
|
|
"strb w4, [x28, #706]",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld ax, bx, cl": {
|
|
"ExpectedInstructionCount": 35,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xad",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"uxtb w22, w5",
|
|
"and x22, x22, #0x1f",
|
|
"mov w23, #0x10",
|
|
"sub x23, x23, x22",
|
|
"lsl x24, x21, x22",
|
|
"lsr w20, w20, w23",
|
|
"orr x20, x24, x20",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel x20, x21, x20, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"cbz x22, #+0x5c",
|
|
"uxth x20, w20",
|
|
"ldr w23, [x28, #728]",
|
|
"mov w24, #0x10",
|
|
"lsl w25, w20, #16",
|
|
"and w25, w25, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x26, eq",
|
|
"orr w25, w25, w26, lsl #30",
|
|
"sub w24, w24, w22",
|
|
"lsr w24, w21, w24",
|
|
"ubfx w24, w24, #0, #1",
|
|
"orr w24, w25, w24, lsl #29",
|
|
"ldrb w25, [x28, #706]",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel x25, x25, x20, eq",
|
|
"strb w25, [x28, #706]",
|
|
"eor w20, w21, w20",
|
|
"ubfx w20, w20, #15, #1",
|
|
"orr w20, w24, w20, lsl #28",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel w20, w23, w20, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld eax, ebx, cl": {
|
|
"ExpectedInstructionCount": 32,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xad",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"uxtb w22, w5",
|
|
"and x22, x22, #0x1f",
|
|
"mov w23, #0x20",
|
|
"sub x23, x23, x22",
|
|
"lsl x24, x21, x22",
|
|
"lsr w20, w20, w23",
|
|
"orr x20, x24, x20",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel x20, x21, x20, eq",
|
|
"lsr w4, w20, #0",
|
|
"cbz x22, #+0x50",
|
|
"ubfx x20, x20, #0, #32",
|
|
"ldr w23, [x28, #728]",
|
|
"tst w20, w20",
|
|
"mrs x24, nzcv",
|
|
"mov w25, #0x20",
|
|
"sub w25, w25, w22",
|
|
"lsr w25, w21, w25",
|
|
"ubfx w25, w25, #0, #1",
|
|
"orr w24, w24, w25, lsl #29",
|
|
"ldrb w25, [x28, #706]",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel x25, x25, x20, eq",
|
|
"strb w25, [x28, #706]",
|
|
"eor w20, w21, w20",
|
|
"lsr w20, w20, #31",
|
|
"orr w20, w24, w20, lsl #28",
|
|
"cmp x22, #0x0 (0)",
|
|
"csel w20, w23, w20, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"shld rax, rbx, cl": {
|
|
"ExpectedInstructionCount": 30,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xad",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"uxtb w21, w5",
|
|
"and x21, x21, #0x3f",
|
|
"mov w22, #0x40",
|
|
"sub x22, x22, x21",
|
|
"lsl x23, x20, x21",
|
|
"lsr x22, x7, x22",
|
|
"orr x22, x23, x22",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x22, x20, x22, eq",
|
|
"mov x4, x22",
|
|
"cbz x21, #+0x4c",
|
|
"ldr w23, [x28, #728]",
|
|
"tst x22, x22",
|
|
"mrs x24, nzcv",
|
|
"mov w25, #0x40",
|
|
"sub x25, x25, x21",
|
|
"lsr x25, x20, x25",
|
|
"ubfx x25, x25, #0, #1",
|
|
"orr w24, w24, w25, lsl #29",
|
|
"ldrb w25, [x28, #706]",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel x25, x25, x22, eq",
|
|
"strb w25, [x28, #706]",
|
|
"eor x20, x20, x22",
|
|
"lsr x20, x20, #63",
|
|
"orr w20, w24, w20, lsl #28",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel w20, w23, w20, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"push gs": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xa8",
|
|
"ExpectedArm64ASM": [
|
|
"ldr x20, [x28, #168]",
|
|
"str x20, [x8, #-8]!"
|
|
]
|
|
},
|
|
"pop gs": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xa9",
|
|
"ExpectedArm64ASM": [
|
|
"ldr x20, [x8]",
|
|
"add x8, x8, #0x8 (8)",
|
|
"strh w20, [x28, #144]",
|
|
"ubfx w20, w20, #3, #13",
|
|
"add x0, x28, x20, lsl #2",
|
|
"ldr w20, [x0, #880]",
|
|
"str w20, [x28, #168]"
|
|
]
|
|
},
|
|
"bts ax, bx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xab",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"and x20, x20, #0xf",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"orr x20, x4, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bts [rax], bx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xab",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #13",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x21",
|
|
"ldrb w23, [x4, x20, sxtx]",
|
|
"lsr w21, w23, w21",
|
|
"orr x22, x23, x22",
|
|
"strb w22, [x4, x20, sxtx]",
|
|
"ubfx w20, w21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bts eax, ebx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xab",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"and x20, x20, #0x1f",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"orr x20, x4, x20",
|
|
"lsr w4, w20, #0",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bts [rax], ebx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xab",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #29",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x21",
|
|
"ldrb w23, [x4, x20, sxtx]",
|
|
"lsr w21, w23, w21",
|
|
"orr x22, x23, x22",
|
|
"strb w22, [x4, x20, sxtx]",
|
|
"ubfx w20, w21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bts rax, rbx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xab",
|
|
"ExpectedArm64ASM": [
|
|
"and x20, x7, #0x3f",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"orr x4, x4, x20",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bts [rax], rbx": {
|
|
"ExpectedInstructionCount": 11,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xab",
|
|
"ExpectedArm64ASM": [
|
|
"ubfx x20, x7, #0, #3",
|
|
"asr x21, x7, #3",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x20",
|
|
"ldrb w23, [x4, x21, sxtx]",
|
|
"lsr w20, w23, w20",
|
|
"orr x22, x23, x22",
|
|
"strb w22, [x4, x21, sxtx]",
|
|
"ubfx w20, w20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"imul ax, bx": {
|
|
"ExpectedInstructionCount": 13,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xaf",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"uxth w21, w7",
|
|
"sxth x20, w20",
|
|
"sxth x21, w21",
|
|
"mul x20, x20, x21",
|
|
"sbfx x21, x20, #16, #16",
|
|
"bfxil x4, x20, #0, #16",
|
|
"mov w22, #0x0",
|
|
"sbfx x20, x20, #15, #1",
|
|
"mov w23, #0x30000000",
|
|
"cmp x21, x20",
|
|
"csel x20, x22, x23, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"imul eax, ebx": {
|
|
"ExpectedInstructionCount": 13,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xaf",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w4, #0",
|
|
"lsr w21, w7, #0",
|
|
"sxtw x20, w20",
|
|
"sxtw x21, w21",
|
|
"mul x20, x20, x21",
|
|
"asr x21, x20, #32",
|
|
"lsr w4, w20, #0",
|
|
"mov w22, #0x0",
|
|
"sbfx x20, x20, #31, #1",
|
|
"mov w23, #0x30000000",
|
|
"cmp x21, x20",
|
|
"csel x20, x22, x23, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"imul rax, rbx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xaf",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"mul x4, x20, x7",
|
|
"smulh x20, x20, x7",
|
|
"mov w21, #0x0",
|
|
"asr x22, x4, #63",
|
|
"mov w23, #0x30000000",
|
|
"cmp x20, x22",
|
|
"csel x20, x21, x23, eq",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg al, bl": {
|
|
"ExpectedInstructionCount": 28,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb0",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"uxtb w21, w4",
|
|
"uxtb x22, w4",
|
|
"cmp x21, x22",
|
|
"csel x23, x22, x21, eq",
|
|
"cmp x21, x22",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x23, #0, #8",
|
|
"bfxil x4, x20, #0, #8",
|
|
"sub x20, x22, x23",
|
|
"uxtb x20, w20",
|
|
"eor w21, w22, w23",
|
|
"strb w21, [x28, #708]",
|
|
"strb w20, [x28, #706]",
|
|
"lsl w21, w20, #24",
|
|
"and w21, w21, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w21, w21, w24, lsl #30",
|
|
"cmp x22, x23",
|
|
"cset x24, lo",
|
|
"orr w21, w21, w24, lsl #29",
|
|
"eor w23, w22, w23",
|
|
"eor w20, w20, w22",
|
|
"and w20, w23, w20",
|
|
"ubfx w20, w20, #7, #1",
|
|
"orr w20, w21, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg [rax], bl": {
|
|
"ExpectedInstructionCount": 25,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb0",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"uxtb w21, w4",
|
|
"mov w1, w21",
|
|
"casalb w1, w20, [x4]",
|
|
"mov w20, w1",
|
|
"bfxil x4, x20, #0, #8",
|
|
"sub w22, w21, w20",
|
|
"uxtb w22, w22",
|
|
"eor w23, w21, w20",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"lsl w23, w22, #24",
|
|
"and w23, w23, #0x80000000",
|
|
"cmp x22, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w23, w23, w24, lsl #30",
|
|
"cmp w21, w20",
|
|
"cset x24, lo",
|
|
"orr w23, w23, w24, lsl #29",
|
|
"eor w20, w21, w20",
|
|
"eor w21, w22, w21",
|
|
"and w20, w20, w21",
|
|
"ubfx w20, w20, #7, #1",
|
|
"orr w20, w23, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg ax, bx": {
|
|
"ExpectedInstructionCount": 28,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb1",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"uxth x22, w4",
|
|
"cmp x21, x22",
|
|
"csel x23, x22, x21, eq",
|
|
"cmp x21, x22",
|
|
"csel w20, w20, w21, eq",
|
|
"bfxil x4, x23, #0, #16",
|
|
"bfxil x4, x20, #0, #16",
|
|
"sub x20, x22, x23",
|
|
"uxth x20, w20",
|
|
"eor w21, w22, w23",
|
|
"strb w21, [x28, #708]",
|
|
"strb w20, [x28, #706]",
|
|
"lsl w21, w20, #16",
|
|
"and w21, w21, #0x80000000",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w21, w21, w24, lsl #30",
|
|
"cmp x22, x23",
|
|
"cset x24, lo",
|
|
"orr w21, w21, w24, lsl #29",
|
|
"eor w23, w22, w23",
|
|
"eor w20, w20, w22",
|
|
"and w20, w23, w20",
|
|
"ubfx w20, w20, #15, #1",
|
|
"orr w20, w21, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg [rax], bx": {
|
|
"ExpectedInstructionCount": 25,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb1",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"uxth w21, w4",
|
|
"mov w1, w21",
|
|
"casalh w1, w20, [x4]",
|
|
"mov w20, w1",
|
|
"bfxil x4, x20, #0, #16",
|
|
"sub w22, w21, w20",
|
|
"uxth w22, w22",
|
|
"eor w23, w21, w20",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"lsl w23, w22, #16",
|
|
"and w23, w23, #0x80000000",
|
|
"cmp x22, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w23, w23, w24, lsl #30",
|
|
"cmp w21, w20",
|
|
"cset x24, lo",
|
|
"orr w23, w23, w24, lsl #29",
|
|
"eor w20, w21, w20",
|
|
"eor w21, w22, w21",
|
|
"and w20, w20, w21",
|
|
"ubfx w20, w20, #15, #1",
|
|
"orr w20, w23, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg eax, ebx": {
|
|
"ExpectedInstructionCount": 19,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb1",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"mov x21, x4",
|
|
"ubfx x22, x21, #0, #32",
|
|
"ubfx x23, x21, #0, #32",
|
|
"cmp x22, x23",
|
|
"csel x24, x23, x22, eq",
|
|
"cmp x22, x23",
|
|
"csel x20, x20, x21, eq",
|
|
"cmp x24, x23",
|
|
"csel x4, x21, x22, eq",
|
|
"mov x4, x20",
|
|
"sub x20, x23, x24",
|
|
"eor w21, w23, w24",
|
|
"strb w21, [x28, #708]",
|
|
"strb w20, [x28, #706]",
|
|
"cmp w23, w24",
|
|
"mrs x20, nzcv",
|
|
"eor w20, w20, #0x20000000",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg [rax], ebx": {
|
|
"ExpectedInstructionCount": 15,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb1",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w21, w4, #0",
|
|
"mov w1, w21",
|
|
"casal w1, w20, [x4]",
|
|
"mov w20, w1",
|
|
"cmp w20, w21",
|
|
"csel x4, x4, x20, eq",
|
|
"sub w22, w21, w20",
|
|
"eor w23, w21, w20",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"cmp w21, w20",
|
|
"mrs x20, nzcv",
|
|
"eor w20, w20, #0x20000000",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg rax, rbx": {
|
|
"ExpectedInstructionCount": 15,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb1",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"cmp x20, x20",
|
|
"csel x21, x20, x20, eq",
|
|
"cmp x20, x20",
|
|
"csel x22, x7, x20, eq",
|
|
"mov x4, x21",
|
|
"mov x4, x22",
|
|
"sub x22, x20, x21",
|
|
"eor x23, x20, x21",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"cmp x20, x21",
|
|
"mrs x20, nzcv",
|
|
"eor w20, w20, #0x20000000",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpxchg [rax], rbx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb1",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"mov x1, x20",
|
|
"casal x1, x7, [x20]",
|
|
"mov x4, x1",
|
|
"sub x21, x20, x4",
|
|
"eor x22, x20, x4",
|
|
"strb w22, [x28, #708]",
|
|
"strb w21, [x28, #706]",
|
|
"cmp x20, x4",
|
|
"mrs x20, nzcv",
|
|
"eor w20, w20, #0x20000000",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btr ax, bx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb3",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"and x20, x20, #0xf",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"bic x20, x4, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btr [rax], bx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb3",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #13",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x21",
|
|
"ldrb w23, [x4, x20, sxtx]",
|
|
"lsr w21, w23, w21",
|
|
"bic x22, x23, x22",
|
|
"strb w22, [x4, x20, sxtx]",
|
|
"ubfx w20, w21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btr eax, ebx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb3",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"and x20, x20, #0x1f",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"bic x20, x4, x20",
|
|
"lsr w4, w20, #0",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btr [rax], ebx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb3",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #29",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x21",
|
|
"ldrb w23, [x4, x20, sxtx]",
|
|
"lsr w21, w23, w21",
|
|
"bic x22, x23, x22",
|
|
"strb w22, [x4, x20, sxtx]",
|
|
"ubfx w20, w21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btr rax, rbx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb3",
|
|
"ExpectedArm64ASM": [
|
|
"and x20, x7, #0x3f",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"bic x4, x4, x20",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btr [rax], rbx": {
|
|
"ExpectedInstructionCount": 11,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xb3",
|
|
"ExpectedArm64ASM": [
|
|
"ubfx x20, x7, #0, #3",
|
|
"asr x21, x7, #3",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x20",
|
|
"ldrb w23, [x4, x21, sxtx]",
|
|
"lsr w20, w23, w20",
|
|
"bic x22, x23, x22",
|
|
"strb w22, [x4, x21, sxtx]",
|
|
"ubfx w20, w20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"movzx ax, bl": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb6",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"bfxil x4, x20, #0, #16"
|
|
]
|
|
},
|
|
"movzx ax, byte [rax]": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb6",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w20, [x4]",
|
|
"bfxil x4, x20, #0, #16"
|
|
]
|
|
},
|
|
"movzx eax, bl": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb6",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w4, w7"
|
|
]
|
|
},
|
|
"movzx eax, byte [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb6",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w4, [x4]"
|
|
]
|
|
},
|
|
"movzx rax, bl": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb6",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w4, w7"
|
|
]
|
|
},
|
|
"movzx rax, byte [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb6",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w4, [x4]"
|
|
]
|
|
},
|
|
"movzx eax, bx": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb7",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w4, w7"
|
|
]
|
|
},
|
|
"movzx eax, word [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb7",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w4, [x4]"
|
|
]
|
|
},
|
|
"movzx rax, bx": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb7",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w4, w7"
|
|
]
|
|
},
|
|
"movzx rax, word [rax]": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xb7",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w4, [x4]"
|
|
]
|
|
},
|
|
"btc ax, bx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbb",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"and x20, x20, #0xf",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"eor x20, x4, x20",
|
|
"bfxil x4, x20, #0, #16",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btc [rax], bx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbb",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #13",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x21",
|
|
"ldrb w23, [x4, x20, sxtx]",
|
|
"lsr w21, w23, w21",
|
|
"eor x22, x23, x22",
|
|
"strb w22, [x4, x20, sxtx]",
|
|
"ubfx w20, w21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btc eax, ebx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbb",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"and x20, x20, #0x1f",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"eor x20, x4, x20",
|
|
"lsr w4, w20, #0",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btc [rax], ebx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbb",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"ubfx w21, w20, #0, #3",
|
|
"sbfx x20, x20, #3, #29",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x21",
|
|
"ldrb w23, [x4, x20, sxtx]",
|
|
"lsr w21, w23, w21",
|
|
"eor x22, x23, x22",
|
|
"strb w22, [x4, x20, sxtx]",
|
|
"ubfx w20, w21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btc rax, rbx": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbb",
|
|
"ExpectedArm64ASM": [
|
|
"and x20, x7, #0x3f",
|
|
"lsr x21, x4, x20",
|
|
"mov w22, #0x1",
|
|
"lsl x20, x22, x20",
|
|
"eor x4, x4, x20",
|
|
"ubfx x20, x21, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"btc [rax], rbx": {
|
|
"ExpectedInstructionCount": 11,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbb",
|
|
"ExpectedArm64ASM": [
|
|
"ubfx x20, x7, #0, #3",
|
|
"asr x21, x7, #3",
|
|
"mov w22, #0x1",
|
|
"lsl x22, x22, x20",
|
|
"ldrb w23, [x4, x21, sxtx]",
|
|
"lsr w20, w23, w20",
|
|
"eor x22, x23, x22",
|
|
"strb w22, [x4, x21, sxtx]",
|
|
"ubfx w20, w20, #0, #1",
|
|
"lsl x20, x20, #29",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bsf ax, bx": {
|
|
"ExpectedInstructionCount": 14,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbc",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"uxth w21, w7",
|
|
"uxth w0, w21",
|
|
"cmp w0, #0x0 (0)",
|
|
"rbit w0, w0",
|
|
"clz w22, w0",
|
|
"csinv w22, w22, wzr, ne",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel w20, w20, w22, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"lsl x20, x20, #30",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bsf eax, ebx": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbc",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"lsr w0, w20, #0",
|
|
"cmp w0, #0x0 (0)",
|
|
"rbit w0, w0",
|
|
"clz w21, w0",
|
|
"csinv w21, w21, wzr, ne",
|
|
"cmp x20, #0x0 (0)",
|
|
"csel x4, x4, x21, eq",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"lsl x20, x20, #30",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bsf rax, rbx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbc",
|
|
"ExpectedArm64ASM": [
|
|
"rbit x0, x7",
|
|
"cmp x7, #0x0 (0)",
|
|
"clz x20, x0",
|
|
"csinv x20, x20, xzr, ne",
|
|
"cmp x7, #0x0 (0)",
|
|
"csel x4, x4, x20, eq",
|
|
"cmp x7, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"lsl x20, x20, #30",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bsr ax, bx": {
|
|
"ExpectedInstructionCount": 14,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbd",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"uxth w21, w7",
|
|
"mov x0, #0xf",
|
|
"lsl w22, w21, #16",
|
|
"orr w22, w22, #0x8000",
|
|
"clz w22, w22",
|
|
"sub x22, x0, x22",
|
|
"cmp x21, #0x0 (0)",
|
|
"csel w20, w20, w22, eq",
|
|
"bfxil x4, x20, #0, #16",
|
|
"cmp x21, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"lsl x20, x20, #30",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bsr eax, ebx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbd",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"mov x0, #0x1f",
|
|
"clz w21, w20",
|
|
"sub x21, x0, x21",
|
|
"cmp x20, #0x0 (0)",
|
|
"csel x4, x4, x21, eq",
|
|
"cmp x20, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"lsl x20, x20, #30",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"bsr rax, rbx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbd",
|
|
"ExpectedArm64ASM": [
|
|
"mov x0, #0x3f",
|
|
"clz x20, x7",
|
|
"sub x20, x0, x20",
|
|
"cmp x7, #0x0 (0)",
|
|
"csel x4, x4, x20, eq",
|
|
"cmp x7, #0x0 (0)",
|
|
"cset x20, eq",
|
|
"lsl x20, x20, #30",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"movsx ax, bl": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbe",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"sxtb x20, w20",
|
|
"bfxil x4, x20, #0, #16"
|
|
]
|
|
},
|
|
"movsx ax, byte [rax]": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbe",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w20, [x4]",
|
|
"sxtb x20, w20",
|
|
"bfxil x4, x20, #0, #16"
|
|
]
|
|
},
|
|
"movsx eax, bl": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbe",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"sxtb x20, w20",
|
|
"lsr w4, w20, #0"
|
|
]
|
|
},
|
|
"movsx eax, byte [rax]": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbe",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w20, [x4]",
|
|
"sxtb x20, w20",
|
|
"lsr w4, w20, #0"
|
|
]
|
|
},
|
|
"movsx rax, bl": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbe",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"sxtb x4, w20"
|
|
]
|
|
},
|
|
"movsx rax, byte [rax]": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xbe",
|
|
"ExpectedArm64ASM": [
|
|
"ldrb w20, [x4]",
|
|
"sxtb x4, w20"
|
|
]
|
|
},
|
|
"movsx eax, bx": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbf",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"sxth x20, w20",
|
|
"lsr w4, w20, #0"
|
|
]
|
|
},
|
|
"movsx eax, word [rax]": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbf",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"sxth x20, w20",
|
|
"lsr w4, w20, #0"
|
|
]
|
|
},
|
|
"movsx rax, bx": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xbf",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"sxth x4, w20"
|
|
]
|
|
},
|
|
"movsx rax, word [rax]": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xbf",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"sxth x4, w20"
|
|
]
|
|
},
|
|
"xadd al, bl": {
|
|
"ExpectedInstructionCount": 23,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc0",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w4",
|
|
"uxtb w21, w7",
|
|
"add w22, w20, w21",
|
|
"bfxil x7, x20, #0, #8",
|
|
"bfxil x4, x22, #0, #8",
|
|
"uxtb w22, w22",
|
|
"eor w23, w20, w21",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"lsl w23, w22, #24",
|
|
"and w23, w23, #0x80000000",
|
|
"cmp x22, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w23, w23, w24, lsl #30",
|
|
"cmp w22, w21",
|
|
"cset x24, lo",
|
|
"orr w23, w23, w24, lsl #29",
|
|
"eor w21, w20, w21",
|
|
"eor w20, w22, w20",
|
|
"bic w20, w20, w21",
|
|
"ubfx w20, w20, #7, #1",
|
|
"orr w20, w23, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd [rax], bl": {
|
|
"ExpectedInstructionCount": 22,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc0",
|
|
"ExpectedArm64ASM": [
|
|
"uxtb w20, w7",
|
|
"ldaddalb w20, w21, [x4]",
|
|
"bfxil x7, x21, #0, #8",
|
|
"add w22, w21, w20",
|
|
"uxtb w22, w22",
|
|
"eor w23, w21, w20",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"lsl w23, w22, #24",
|
|
"and w23, w23, #0x80000000",
|
|
"cmp x22, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w23, w23, w24, lsl #30",
|
|
"cmp w22, w20",
|
|
"cset x24, lo",
|
|
"orr w23, w23, w24, lsl #29",
|
|
"eor w20, w21, w20",
|
|
"eor w21, w22, w21",
|
|
"bic w20, w21, w20",
|
|
"ubfx w20, w20, #7, #1",
|
|
"orr w20, w23, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd ax, bx": {
|
|
"ExpectedInstructionCount": 23,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc1",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"uxth w21, w7",
|
|
"add w22, w20, w21",
|
|
"bfxil x7, x20, #0, #16",
|
|
"bfxil x4, x22, #0, #16",
|
|
"uxth w22, w22",
|
|
"eor w23, w20, w21",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"lsl w23, w22, #16",
|
|
"and w23, w23, #0x80000000",
|
|
"cmp x22, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w23, w23, w24, lsl #30",
|
|
"cmp w22, w21",
|
|
"cset x24, lo",
|
|
"orr w23, w23, w24, lsl #29",
|
|
"eor w21, w20, w21",
|
|
"eor w20, w22, w20",
|
|
"bic w20, w20, w21",
|
|
"ubfx w20, w20, #15, #1",
|
|
"orr w20, w23, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd [rax], bx": {
|
|
"ExpectedInstructionCount": 22,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc1",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w7",
|
|
"ldaddalh w20, w21, [x4]",
|
|
"bfxil x7, x21, #0, #16",
|
|
"add w22, w21, w20",
|
|
"uxth w22, w22",
|
|
"eor w23, w21, w20",
|
|
"strb w23, [x28, #708]",
|
|
"strb w22, [x28, #706]",
|
|
"lsl w23, w22, #16",
|
|
"and w23, w23, #0x80000000",
|
|
"cmp x22, #0x0 (0)",
|
|
"cset x24, eq",
|
|
"orr w23, w23, w24, lsl #30",
|
|
"cmp w22, w20",
|
|
"cset x24, lo",
|
|
"orr w23, w23, w24, lsl #29",
|
|
"eor w20, w21, w20",
|
|
"eor w21, w22, w21",
|
|
"bic w20, w21, w20",
|
|
"ubfx w20, w20, #15, #1",
|
|
"orr w20, w23, w20, lsl #28",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd eax, ebx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc1",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w4, #0",
|
|
"lsr w21, w7, #0",
|
|
"add w4, w20, w21",
|
|
"mov x7, x20",
|
|
"eor w22, w20, w21",
|
|
"strb w22, [x28, #708]",
|
|
"strb w4, [x28, #706]",
|
|
"cmn w20, w21",
|
|
"mrs x20, nzcv",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd [rax], ebx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc1",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"ldaddal w20, w7, [x4]",
|
|
"add w21, w7, w20",
|
|
"eor w22, w7, w20",
|
|
"strb w22, [x28, #708]",
|
|
"strb w21, [x28, #706]",
|
|
"cmn w7, w20",
|
|
"mrs x20, nzcv",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd rax, rbx": {
|
|
"ExpectedInstructionCount": 10,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc1",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x4",
|
|
"mov x21, x7",
|
|
"add x4, x20, x21",
|
|
"mov x7, x20",
|
|
"eor x22, x20, x21",
|
|
"strb w22, [x28, #708]",
|
|
"strb w4, [x28, #706]",
|
|
"cmn x20, x21",
|
|
"mrs x20, nzcv",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"xadd [rax], rbx": {
|
|
"ExpectedInstructionCount": 9,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc1",
|
|
"ExpectedArm64ASM": [
|
|
"mov x20, x7",
|
|
"ldaddal x20, x7, [x4]",
|
|
"add x21, x7, x20",
|
|
"eor x22, x7, x20",
|
|
"strb w22, [x28, #708]",
|
|
"strb w21, [x28, #706]",
|
|
"cmn x7, x20",
|
|
"mrs x20, nzcv",
|
|
"str w20, [x28, #728]"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 0": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmeq v16.4s, v16.4s, v17.4s"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 1": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmgt v16.4s, v17.4s, v16.4s"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 2": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmge v16.4s, v17.4s, v16.4s"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 3": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmge v0.4s, v16.4s, v17.4s",
|
|
"fcmgt v1.4s, v17.4s, v16.4s",
|
|
"orr v16.16b, v0.16b, v1.16b",
|
|
"mvn v16.16b, v16.16b"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 4": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmeq v16.4s, v16.4s, v17.4s",
|
|
"mvn v16.16b, v16.16b"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 5": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmgt v2.4s, v17.4s, v16.4s",
|
|
"mvn v16.16b, v2.16b"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 6": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmge v2.4s, v17.4s, v16.4s",
|
|
"mvn v16.16b, v2.16b"
|
|
]
|
|
},
|
|
"cmpps xmm0, xmm1, 7": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc2",
|
|
"ExpectedArm64ASM": [
|
|
"fcmge v0.4s, v16.4s, v17.4s",
|
|
"fcmgt v1.4s, v17.4s, v16.4s",
|
|
"orr v16.16b, v0.16b, v1.16b"
|
|
]
|
|
},
|
|
"movnti [rax], ebx": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc3",
|
|
"ExpectedArm64ASM": [
|
|
"lsr w20, w7, #0",
|
|
"str w20, [x4]"
|
|
]
|
|
},
|
|
"movnti [rax], rbx": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc3",
|
|
"ExpectedArm64ASM": [
|
|
"str x7, [x4]"
|
|
]
|
|
},
|
|
"pinsrw mm0, eax, 0": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[0], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, eax, 1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[1], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, eax, 2": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[2], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, eax, 3": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[3], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, eax, 4": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"uxth w20, w4",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[0], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, [rax], 0": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[0], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, [rax], 1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[1], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, [rax], 2": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[2], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, [rax], 3": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[3], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pinsrw mm0, [rax], 4": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc4",
|
|
"ExpectedArm64ASM": [
|
|
"ldrh w20, [x4]",
|
|
"ldr d2, [x28, #752]",
|
|
"mov v2.h[0], w20",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pextrw eax, mm0, 0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"umov w4, v2.h[0]"
|
|
]
|
|
},
|
|
"pextrw eax, mm0, 1": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"umov w4, v2.h[1]"
|
|
]
|
|
},
|
|
"pextrw eax, mm0, 2": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"umov w4, v2.h[2]"
|
|
]
|
|
},
|
|
"pextrw eax, mm0, 3": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"umov w4, v2.h[3]"
|
|
]
|
|
},
|
|
"pextrw eax, mm0, 4": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"umov w4, v2.h[0]"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01000100b": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Dst[63:0] = Src1[63:0]",
|
|
"Dest[127:64] = Src2[63:0]",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"zip1 v16.2d, v16.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11101110b": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Dst[63:0] = Src1[127:64]",
|
|
"Dest[127:64] = Src2[127:64]",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"zip2 v16.2d, v16.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11100100b": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Dst[63:0] = Src1[63:0]",
|
|
"Dest[127:64] = Src2[127:64]",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"mov v16.d[1], v17.d[1]"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01001110b": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Dst[63:0] = Src1[63:0]",
|
|
"Dest[127:64] = Src2[127:64]",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"ext v16.16b, v16.16b, v17.16b, #8"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 00000000b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[0]",
|
|
"dup v3.4s, v17.s[0]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 00000101b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[1]",
|
|
"dup v3.4s, v17.s[0]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 00001010b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[2]",
|
|
"dup v3.4s, v17.s[0]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 00001111b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[3]",
|
|
"dup v3.4s, v17.s[0]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01010000b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[0]",
|
|
"dup v3.4s, v17.s[1]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01010101b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[1]",
|
|
"dup v3.4s, v17.s[1]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01011010b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[2]",
|
|
"dup v3.4s, v17.s[1]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01011111b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[3]",
|
|
"dup v3.4s, v17.s[1]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 10100000b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[0]",
|
|
"dup v3.4s, v17.s[2]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 10100101b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[1]",
|
|
"dup v3.4s, v17.s[2]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 10101010b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[2]",
|
|
"dup v3.4s, v17.s[2]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 10101111b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[3]",
|
|
"dup v3.4s, v17.s[2]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11110000b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[0]",
|
|
"dup v3.4s, v17.s[3]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11110101b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[1]",
|
|
"dup v3.4s, v17.s[3]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11111010b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[2]",
|
|
"dup v3.4s, v17.s[3]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11100000b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[0]",
|
|
"zip2 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11100101b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[1]",
|
|
"zip2 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11101010b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[2]",
|
|
"zip2 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11101111b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[3]",
|
|
"zip2 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01000000b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[0]",
|
|
"zip1 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01000101b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[1]",
|
|
"zip1 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01001010b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[2]",
|
|
"zip1 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01001111b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Bottom elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[3]",
|
|
"zip1 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 00000100b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Bottom 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[0]",
|
|
"zip1 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01010100b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Bottom 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[1]",
|
|
"zip1 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 10100100b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Bottom 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[2]",
|
|
"zip1 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11110100b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Bottom 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[3]",
|
|
"zip1 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 00001110b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[0]",
|
|
"zip2 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01011110b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[1]",
|
|
"zip2 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 10101110b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[2]",
|
|
"zip2 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11111110b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Top elements duplicated, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v17.s[3]",
|
|
"zip2 v16.2d, v16.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01000111b": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": [
|
|
"odd elements inverted, Low 64-bits inserted",
|
|
"SRA quirks with RA fail to understand that v16 is dead",
|
|
"Could InsElement directly in to v16 but it does two moves instead",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"mov v0.16b, v16.16b",
|
|
"mov v0.s[0], v16.s[3]",
|
|
"mov v2.16b, v0.16b",
|
|
"zip1 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11100111b": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "No",
|
|
"Comment": [
|
|
"odd elements inverted, Top 64-bits inserted",
|
|
"SRA quirks with RA fail to understand that v16 is dead",
|
|
"Could InsElement directly in to v16 but it does two moves instead",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"mov v0.16b, v16.16b",
|
|
"mov v0.s[0], v16.s[3]",
|
|
"mov v2.16b, v0.16b",
|
|
"mov v0.16b, v2.16b",
|
|
"mov v0.d[1], v17.d[1]",
|
|
"mov v16.16b, v0.16b"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11100001b": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Lower 32-bit elements inverted, Top 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"rev64 v2.4s, v16.4s",
|
|
"mov v0.16b, v2.16b",
|
|
"mov v0.d[1], v17.d[1]",
|
|
"mov v16.16b, v0.16b"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 01000001b": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Lower 32-bit elements inverted, Low 64-bits inserted",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"rev64 v2.4s, v16.4s",
|
|
"zip1 v16.2d, v2.2d, v17.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 11111111b": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "Yes",
|
|
"Comment": [
|
|
"Duplicate selected element between each 64-bit segment",
|
|
"0x0f 0xc6"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"dup v2.4s, v16.s[3]",
|
|
"dup v3.4s, v17.s[3]",
|
|
"zip1 v16.2d, v2.2d, v3.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, [rax], 0": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc6",
|
|
"ExpectedArm64ASM": [
|
|
"ldr q2, [x4]",
|
|
"dup v3.4s, v16.s[0]",
|
|
"dup v2.4s, v2.s[0]",
|
|
"zip1 v16.2d, v3.2d, v2.2d"
|
|
]
|
|
},
|
|
"shufps xmm0, xmm1, 1": {
|
|
"ExpectedInstructionCount": 3,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc6",
|
|
"ExpectedArm64ASM": [
|
|
"ldr x0, [x28, #1640]",
|
|
"ldr q2, [x0, #16]",
|
|
"tbl v16.16b, {v16.16b, v17.16b}, v2.16b"
|
|
]
|
|
},
|
|
"shufps xmm1, xmm0, 1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc6",
|
|
"ExpectedArm64ASM": [
|
|
"ldr x0, [x28, #1640]",
|
|
"ldr q2, [x0, #16]",
|
|
"mov v0.16b, v17.16b",
|
|
"mov v1.16b, v16.16b",
|
|
"tbl v17.16b, {v0.16b, v1.16b}, v2.16b"
|
|
]
|
|
},
|
|
"shufps xmm0, [rax], 1": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc6",
|
|
"ExpectedArm64ASM": [
|
|
"ldr q2, [x4]",
|
|
"ldr x0, [x28, #1640]",
|
|
"ldr q3, [x0, #16]",
|
|
"mov v0.16b, v16.16b",
|
|
"mov v1.16b, v2.16b",
|
|
"tbl v16.16b, {v0.16b, v1.16b}, v3.16b"
|
|
]
|
|
},
|
|
"shufps xmm0, [rax], 0xFF": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "No",
|
|
"Comment": "0x0f 0xc6",
|
|
"ExpectedArm64ASM": [
|
|
"ldr q2, [x4]",
|
|
"dup v3.4s, v16.s[3]",
|
|
"dup v2.4s, v2.s[3]",
|
|
"zip1 v16.2d, v3.2d, v2.2d"
|
|
]
|
|
},
|
|
"bswap eax": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc8",
|
|
"ExpectedArm64ASM": [
|
|
"rev w4, w4"
|
|
]
|
|
},
|
|
"bswap rax": {
|
|
"ExpectedInstructionCount": 1,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xc8",
|
|
"ExpectedArm64ASM": [
|
|
"rev x4, x4"
|
|
]
|
|
},
|
|
"psrlw mm0, mm1": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd1",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.8h, v0.h[0]",
|
|
"neg v0.8h, v0.8h",
|
|
"ushl v2.8h, v3.8h, v0.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psrld mm0, mm1": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd2",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.4s, v0.s[0]",
|
|
"neg v0.4s, v0.4s",
|
|
"ushl v2.4s, v3.4s, v0.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psrlq mm0, mm1": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd3",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.2d, v0.d[0]",
|
|
"neg v0.2d, v0.2d",
|
|
"ushl v2.2d, v3.2d, v0.2d",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddq mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd4",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"add v2.2d, v3.2d, v2.2d",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmullw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"mul v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmovmskb eax, mm0": {
|
|
"ExpectedInstructionCount": 12,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd7",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"mov x20, #0x201",
|
|
"movk x20, #0x804, lsl #16",
|
|
"movk x20, #0x2010, lsl #32",
|
|
"movk x20, #0x8040, lsl #48",
|
|
"dup v3.2d, x20",
|
|
"cmlt v2.16b, v2.16b, #0",
|
|
"and v2.16b, v2.16b, v3.16b",
|
|
"addp v2.16b, v2.16b, v2.16b",
|
|
"addp v2.8b, v2.8b, v2.8b",
|
|
"addp v2.8b, v2.8b, v2.8b",
|
|
"umov w4, v2.h[0]"
|
|
]
|
|
},
|
|
"psubusb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd8",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqsub v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psubusw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xd9",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqsub v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pminub mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xda",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"umin v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pand mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xdb",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"and v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddusb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xdc",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqadd v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddusw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xdd",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqadd v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmaxub mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xde",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"umax v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pandn mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xdf",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"bic v2.16b, v2.16b, v3.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pavgb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe0",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"urhadd v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psraw mm0, mm1": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe1",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.8h, v0.h[0]",
|
|
"neg v0.8h, v0.8h",
|
|
"sshl v2.8h, v3.8h, v0.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psrad mm0, mm1": {
|
|
"ExpectedInstructionCount": 8,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe2",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.4s, v0.s[0]",
|
|
"neg v0.4s, v0.4s",
|
|
"sshl v2.4s, v3.4s, v0.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pavgw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe3",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"urhadd v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmulhuw mm0, mm1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe4",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"umull v2.4s, v2.4h, v3.4h",
|
|
"shrn v2.4h, v2.4s, #16",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmulhw mm0, mm1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"smull v2.4s, v2.4h, v3.4h",
|
|
"shrn v2.4h, v2.4s, #16",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"movntq [rax], mm0": {
|
|
"ExpectedInstructionCount": 2,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe7",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"str d2, [x4]"
|
|
]
|
|
},
|
|
"psubsb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe8",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sqsub v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psubsw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xe9",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sqsub v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pminsw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xea",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"smin v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"por mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xeb",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"orr v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddsb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xec",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sqadd v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddsw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xed",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sqadd v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmaxsw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xee",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"smax v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pxor mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xef",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"eor v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psllw mm0, mm1": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf1",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.8h, v0.h[0]",
|
|
"ushl v2.8h, v3.8h, v0.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pslld mm0, mm1": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf2",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.4s, v0.s[0]",
|
|
"ushl v2.4s, v3.4s, v0.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psllq mm0, mm1": {
|
|
"ExpectedInstructionCount": 7,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf3",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"uqshl d0, d2, #57",
|
|
"ushr d0, d0, #57",
|
|
"dup v0.2d, v0.d[0]",
|
|
"ushl v2.2d, v3.2d, v0.2d",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmuludq mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf4",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"umull v2.2d, v2.2s, v3.2s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"pmaddwd mm0, mm1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf5",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"smull v2.4s, v2.4h, v3.4h",
|
|
"addp v2.4s, v2.4s, v2.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psadbw mm0, mm1": {
|
|
"ExpectedInstructionCount": 5,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf6",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #752]",
|
|
"ldr d3, [x28, #768]",
|
|
"uabdl v2.8h, v2.8b, v3.8b",
|
|
"addv h2, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"maskmovq mm0, mm1": {
|
|
"ExpectedInstructionCount": 6,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf7",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"cmlt v2.16b, v2.16b, #0",
|
|
"ldr d3, [x28, #752]",
|
|
"ldr d4, [x11]",
|
|
"bsl v2.8b, v3.8b, v4.8b",
|
|
"str d2, [x11]"
|
|
]
|
|
},
|
|
"psubb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf8",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sub v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psubw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xf9",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sub v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psubd mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xfa",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sub v2.4s, v3.4s, v2.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"psubq mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xfb",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"sub v2.2d, v3.2d, v2.2d",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddb mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xfc",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"add v2.16b, v3.16b, v2.16b",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddw mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xfd",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"add v2.8h, v3.8h, v2.8h",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
},
|
|
"paddd mm0, mm1": {
|
|
"ExpectedInstructionCount": 4,
|
|
"Optimal": "Yes",
|
|
"Comment": "0x0f 0xfe",
|
|
"ExpectedArm64ASM": [
|
|
"ldr d2, [x28, #768]",
|
|
"ldr d3, [x28, #752]",
|
|
"add v2.4s, v3.4s, v2.4s",
|
|
"str d2, [x28, #752]"
|
|
]
|
|
}
|
|
}
|
|
}
|