Index: src/IceInstMIPS32.cpp |
diff --git a/src/IceInstMIPS32.cpp b/src/IceInstMIPS32.cpp |
index e7485b915457732924a7a0ed388ee088e7fef2f8..65c831d0ddfdd8d6f6a53e027a7eb92c954d10ef 100644 |
--- a/src/IceInstMIPS32.cpp |
+++ b/src/IceInstMIPS32.cpp |
@@ -713,27 +713,40 @@ void InstMIPS32Mov::emitSingleDestSingleSource(const Cfg *Func) const { |
// reg to reg |
if (DestIsReg && SrcIsReg) { |
- switch (Dest->getType()) { |
- case IceType_f32: |
- ActualOpcode = "mov.s"; |
- break; |
- case IceType_f64: |
- ActualOpcode = "mov.d"; |
- break; |
- case IceType_i1: |
- case IceType_i8: |
- case IceType_i16: |
- case IceType_i32: |
- Str << "\t" |
- << "move" |
- << "\t"; |
- getDest()->emit(Func); |
- Str << ", "; |
- getSrc(0)->emit(Func); |
- return; |
- default: |
- UnimplementedError(getFlags()); |
- return; |
+ const Type DstType = Dest->getType(); |
+ const Type SrcType = Src->getType(); |
+ |
+ // move GP to/from FP |
+ if (DstType != SrcType) { |
+ if (isScalarFloatingType(DstType) == true) { |
Jim Stichnoth
2016/09/07 15:39:31
remove the redundant "== true"
jaydeep.patil
2016/09/13 06:18:36
Done.
|
+ Str << "\t" |
+ "mtc1" |
+ "\t"; |
+ getSrc(0)->emit(Func); |
+ Str << ", "; |
+ getDest()->emit(Func); |
+ return; |
+ } else { |
Jim Stichnoth
2016/09/07 15:39:31
http://llvm.org/docs/CodingStandards.html#don-t-us
jaydeep.patil
2016/09/13 06:18:36
Done.
|
+ ActualOpcode = "mfc1"; |
+ } |
+ } else { |
+ switch (Dest->getType()) { |
+ case IceType_f32: |
+ ActualOpcode = "mov.s"; |
+ break; |
+ case IceType_f64: |
+ ActualOpcode = "mov.d"; |
+ break; |
+ case IceType_i1: |
+ case IceType_i8: |
+ case IceType_i16: |
+ case IceType_i32: |
+ ActualOpcode = "move"; |
obucinac
2016/09/08 09:52:01
As adviced earlier by Simon Dardis, we should use
jaydeep.patil
2016/09/13 06:18:36
This change should be done in AssemblerMIPS32::mov
|
+ break; |
+ default: |
+ UnimplementedError(getFlags()); |
+ return; |
+ } |
} |
assert(ActualOpcode); |