From 1e6a71524e6b048af22e8349e0a785596fb8aca6 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 6 Apr 2005 04:19:22 +0000 Subject: [PATCH] add signed versions of the extra precision multiplies git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21106 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrInfo.td | 13 +++++++++++++ lib/Target/X86/X86RegisterInfo.cpp | 3 +++ 2 files changed, 16 insertions(+) diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index 53bad1becd6..6c4eda3880f 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -339,6 +339,19 @@ def MUL16m : I<0xF7, MRM4m, (ops i16mem:$src), def MUL32m : I<0xF7, MRM4m, (ops i32mem:$src), "mul{l} $src">, Imp<[EAX],[EAX,EDX]>; // EAX,EDX = EAX*[mem32] +def IMUL8r : I<0xF6, MRM5r, (ops R8:$src), "imul{b} $src">, + Imp<[AL],[AX]>; // AL,AH = AL*R8 +def IMUL16r : I<0xF7, MRM5r, (ops R16:$src), "imul{w} $src">, + Imp<[AX],[AX,DX]>, OpSize; // AX,DX = AX*R16 +def IMUL32r : I<0xF7, MRM5r, (ops R32:$src), "imul{l} $src">, + Imp<[EAX],[EAX,EDX]>; // EAX,EDX = EAX*R32 +def IMUL8m : I<0xF6, MRM5m, (ops i8mem :$src), + "imul{b} $src">, Imp<[AL],[AX]>; // AL,AH = AL*[mem8] +def IMUL16m : I<0xF7, MRM5m, (ops i16mem:$src), + "imul{w} $src">, Imp<[AX],[AX,DX]>, OpSize;// AX,DX = AX*[mem16] +def IMUL32m : I<0xF7, MRM5m, (ops i32mem:$src), + "imul{l} $src">, Imp<[EAX],[EAX,EDX]>; // EAX,EDX = EAX*[mem32] + // unsigned division/remainder def DIV8r : I<0xF6, MRM6r, (ops R8:$src), // AX/r8 = AL,AH "div{b} $src">, Imp<[AX],[AX]>; diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp index 696dba8e63f..898b08d5a8c 100644 --- a/lib/Target/X86/X86RegisterInfo.cpp +++ b/lib/Target/X86/X86RegisterInfo.cpp @@ -149,6 +149,9 @@ MachineInstr* X86RegisterInfo::foldMemoryOperand(MachineInstr* MI, case X86::MUL8r: return MakeMInst( X86::MUL8m , FrameIndex, MI); case X86::MUL16r: return MakeMInst( X86::MUL16m, FrameIndex, MI); case X86::MUL32r: return MakeMInst( X86::MUL32m, FrameIndex, MI); + case X86::IMUL8r: return MakeMInst( X86::IMUL8m , FrameIndex, MI); + case X86::IMUL16r: return MakeMInst( X86::IMUL16m, FrameIndex, MI); + case X86::IMUL32r: return MakeMInst( X86::IMUL32m, FrameIndex, MI); case X86::DIV8r: return MakeMInst( X86::DIV8m , FrameIndex, MI); case X86::DIV16r: return MakeMInst( X86::DIV16m, FrameIndex, MI); case X86::DIV32r: return MakeMInst( X86::DIV32m, FrameIndex, MI);