diff options
| author | merry <MerryMage@users.noreply.github.com> | 2020-06-05 11:58:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-05 20:58:27 +1000 |
| commit | f8cd072b62808c8da06549807cc263003f0049b7 (patch) | |
| tree | 630749551fb53adc3687edd63945361292f93927 /ARMeilleure/CodeGen/X86/Assembler.cs | |
| parent | bcb7761eacaf9e40cc506648fec1eed58c23eff0 (diff) | |
Faster crc32 implementation (#1294)
* Add Pclmulqdq intrinsic
* Implement crc32 in terms of pclmulqdq
* Address PR comments
Diffstat (limited to 'ARMeilleure/CodeGen/X86/Assembler.cs')
| -rw-r--r-- | ARMeilleure/CodeGen/X86/Assembler.cs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/ARMeilleure/CodeGen/X86/Assembler.cs b/ARMeilleure/CodeGen/X86/Assembler.cs index de361677..5ad54289 100644 --- a/ARMeilleure/CodeGen/X86/Assembler.cs +++ b/ARMeilleure/CodeGen/X86/Assembler.cs @@ -165,6 +165,7 @@ namespace ARMeilleure.CodeGen.X86 Add(X86Instruction.Pavgb, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x00000fe0, InstructionFlags.Vex | InstructionFlags.Prefix66)); Add(X86Instruction.Pavgw, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x00000fe3, InstructionFlags.Vex | InstructionFlags.Prefix66)); Add(X86Instruction.Pblendvb, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x000f3810, InstructionFlags.Prefix66)); + Add(X86Instruction.Pclmulqdq, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x000f3a44, InstructionFlags.Vex | InstructionFlags.Prefix66)); Add(X86Instruction.Pcmpeqb, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x00000f74, InstructionFlags.Vex | InstructionFlags.Prefix66)); Add(X86Instruction.Pcmpeqd, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x00000f76, InstructionFlags.Vex | InstructionFlags.Prefix66)); Add(X86Instruction.Pcmpeqq, new InstructionInfo(BadOp, BadOp, BadOp, BadOp, 0x000f3829, InstructionFlags.Vex | InstructionFlags.Prefix66)); @@ -633,6 +634,13 @@ namespace ARMeilleure.CodeGen.X86 WriteInstruction(dest, source, type, X86Instruction.Or); } + public void Pclmulqdq(Operand dest, Operand source, byte imm) + { + WriteInstruction(dest, null, source, X86Instruction.Pclmulqdq); + + WriteByte(imm); + } + public void Pcmpeqw(Operand dest, Operand src1, Operand src2) { WriteInstruction(dest, src1, src2, X86Instruction.Pcmpeqw); |
