| !sum | |
| # Ints | |
| - go: Equal | |
| asm: "V?PCMPEQ[BWDQ]" | |
| in: | |
| - &any | |
| go: $t | |
| - *any | |
| out: | |
| - &anyvregToMask | |
| go: $t | |
| overwriteBase: int | |
| overwriteClass: mask | |
| - go: Greater | |
| asm: "V?PCMPGT[BWDQ]" | |
| in: | |
| - &int | |
| go: $t | |
| base: int | |
| - *int | |
| out: | |
| - *anyvregToMask | |
| # 256-bit VCMPGTQ's output elemBits is marked 32-bit in the XED data, we | |
| # believe this is an error, so add this definition to overwrite. | |
| - go: Greater | |
| asm: "VPCMPGTQ" | |
| in: | |
| - &int64 | |
| go: $t | |
| base: int | |
| elemBits: 64 | |
| - *int64 | |
| out: | |
| - base: int | |
| elemBits: 32 | |
| overwriteElementBits: 64 | |
| overwriteClass: mask | |
| overwriteBase: int | |
| # TODO these are redundant with VPCMP operations. | |
| # AVX-512 compares produce masks. | |
| - go: Equal | |
| asm: "V?PCMPEQ[BWDQ]" | |
| in: | |
| - *any | |
| - *any | |
| out: | |
| - class: mask | |
| - go: Greater | |
| asm: "V?PCMPGT[BWDQ]" | |
| in: | |
| - *int | |
| - *int | |
| out: | |
| - class: mask | |
| # MASKED signed comparisons for X/Y registers | |
| # unmasked would clash with emulations on AVX2 | |
| - go: (Equal|Greater|Less|LessEqual|GreaterEqual|NotEqual) | |
| regexpTag: "compares" | |
| asm: "VPCMP[BWDQ]" | |
| in: | |
| - class: immediate | |
| const: 0 # Just a placeholder, will be overwritten by const imm porting. | |
| - &int | |
| bits: (128|256) | |
| go: $t | |
| base: int | |
| - *int | |
| inVariant: | |
| - class: mask | |
| out: | |
| - class: mask | |
| # MASKED unsigned comparisons for X/Y registers | |
| # unmasked would clash with emulations on AVX2 | |
| - go: (Equal|Greater|Less|LessEqual|GreaterEqual|NotEqual) | |
| regexpTag: "compares" | |
| asm: "VPCMPU[BWDQ]" | |
| in: | |
| - class: immediate | |
| const: 0 | |
| - &uint | |
| bits: (128|256) | |
| go: $t | |
| base: uint | |
| - *uint | |
| inVariant: | |
| - class: mask | |
| out: | |
| - class: mask | |
| # masked/unmasked signed comparisons for Z registers | |
| - go: (Equal|Greater|Less|LessEqual|GreaterEqual|NotEqual) | |
| regexpTag: "compares" | |
| asm: "VPCMP[BWDQ]" | |
| in: | |
| - class: immediate | |
| const: 0 # Just a placeholder, will be overwritten by const imm porting. | |
| - &int | |
| bits: 512 | |
| go: $t | |
| base: int | |
| - *int | |
| out: | |
| - class: mask | |
| # masked/unmasked unsigned comparisons for Z registers | |
| - go: (Equal|Greater|Less|LessEqual|GreaterEqual|NotEqual) | |
| regexpTag: "compares" | |
| asm: "VPCMPU[BWDQ]" | |
| in: | |
| - class: immediate | |
| const: 0 | |
| - &uint | |
| bits: 512 | |
| go: $t | |
| base: uint | |
| - *uint | |
| out: | |
| - class: mask | |
| # Floats | |
| - go: (Equal|Greater|Less|LessEqual|GreaterEqual|NotEqual) | |
| regexpTag: "compares" | |
| asm: "VCMPP[SD]" | |
| in: | |
| - class: immediate | |
| const: 0 | |
| - &float | |
| go: $t | |
| base: float | |
| - *float | |
| out: | |
| - go: $t | |
| overwriteBase: int | |
| overwriteClass: mask | |
| - go: (Equal|Greater|Less|LessEqual|GreaterEqual|NotEqual) | |
| regexpTag: "compares" | |
| asm: "VCMPP[SD]" | |
| in: | |
| - class: immediate | |
| const: 0 | |
| - *float | |
| - *float | |
| out: | |
| - class: mask |