Index: src/IceInstARM32.h |
diff --git a/src/IceInstARM32.h b/src/IceInstARM32.h |
index 7a543c43619329f6c34ac7d890b3352916ef03bc..3c6503720910549040d09665eb89735de3f3d511 100644 |
--- a/src/IceInstARM32.h |
+++ b/src/IceInstARM32.h |
@@ -438,6 +438,7 @@ public: |
Vneg, |
Vorr, |
Vshl, |
+ Vshr, |
Vsqrt, |
Vsub |
}; |
@@ -822,12 +823,18 @@ public: |
InstARM32ThreeAddrSignAwareFP(Func, Dest, Src0, Src1); |
} |
+ static InstARM32ThreeAddrSignAwareFP * |
+ create(Cfg *Func, Variable *Dest, Variable *Src0, ConstantInteger32 *Src1) { |
+ return new (Func->allocate<InstARM32ThreeAddrSignAwareFP>()) |
+ InstARM32ThreeAddrSignAwareFP(Func, Dest, Src0, Src1); |
+ } |
+ |
void emitIAS(const Cfg *Func) const override; |
void setSignType(InstARM32::FPSign SignType) { this->Sign = SignType; } |
private: |
InstARM32ThreeAddrSignAwareFP(Cfg *Func, Variable *Dest, Variable *Src0, |
- Variable *Src1) |
+ Operand *Src1) |
: InstARM32ThreeAddrFP<K>(Func, Dest, Src0, Src1) {} |
}; |
@@ -993,6 +1000,7 @@ using InstARM32Vmul = InstARM32ThreeAddrFP<InstARM32::Vmul>; |
using InstARM32Vneg = InstARM32UnaryopSignAwareFP<InstARM32::Vneg>; |
using InstARM32Vorr = InstARM32ThreeAddrFP<InstARM32::Vorr>; |
using InstARM32Vshl = InstARM32ThreeAddrSignAwareFP<InstARM32::Vshl>; |
+using InstARM32Vshr = InstARM32ThreeAddrSignAwareFP<InstARM32::Vshr>; |
using InstARM32Vsub = InstARM32ThreeAddrFP<InstARM32::Vsub>; |
using InstARM32Ldr = InstARM32LoadBase<InstARM32::Ldr>; |
using InstARM32Ldrex = InstARM32LoadBase<InstARM32::Ldrex>; |
@@ -1358,7 +1366,22 @@ class InstARM32Vcvt final : public InstARM32Pred { |
InstARM32Vcvt &operator=(const InstARM32Vcvt &) = delete; |
public: |
- enum VcvtVariant { S2si, S2ui, Si2s, Ui2s, D2si, D2ui, Si2d, Ui2d, S2d, D2s }; |
+ enum VcvtVariant { |
+ S2si, |
+ S2ui, |
+ Si2s, |
+ Ui2s, |
+ D2si, |
+ D2ui, |
+ Si2d, |
+ Ui2d, |
+ S2d, |
+ D2s, |
+ Vs2si, |
+ Vs2ui, |
+ Vsi2s, |
+ Vui2s, |
+ }; |
static InstARM32Vcvt *create(Cfg *Func, Variable *Dest, Variable *Src, |
VcvtVariant Variant, CondARM32::Cond Predicate) { |
return new (Func->allocate<InstARM32Vcvt>()) |