Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Unified Diff: src/IceOperand.h

Issue 353553004: Add support for vector types and vector constants. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: 1) Fix alignment in type table. 2) Add VECT128_BYTES constant. 3) add _movp() function. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/IceOperand.h
diff --git a/src/IceOperand.h b/src/IceOperand.h
index 00febc402327a24773d41be5e7c6cebc4cbb2b6b..75a6a720660f04dfdb410d0e4a6fdb5bb8f277e5 100644
--- a/src/IceOperand.h
+++ b/src/IceOperand.h
@@ -32,6 +32,8 @@ public:
kConstDouble,
kConstRelocatable,
kConstUndef,
+ kConstVector,
+ kConstBitVector,
kConst_Num,
kVariable,
// Target-specific operand classes use kTarget as the starting
@@ -109,21 +111,20 @@ private:
Constant &operator=(const Constant &) LLVM_DELETED_FUNCTION;
};
-// ConstantPrimitive<> wraps a primitive type.
+// ConstantValue<> wraps a concrete constant value
jvoung (off chromium) 2014/06/26 23:33:46 nit: keep the period at the end of the sentence.
template <typename T, Operand::OperandKind K>
-class ConstantPrimitive : public Constant {
+class ConstantValue : public Constant {
public:
- static ConstantPrimitive *create(GlobalContext *Ctx, Type Ty, T Value,
- uint32_t PoolEntryID) {
- return new (Ctx->allocate<ConstantPrimitive>())
- ConstantPrimitive(Ty, Value, PoolEntryID);
+ static ConstantValue *create(GlobalContext *Ctx, Type Ty, T Value,
+ uint32_t PoolEntryID) {
+ return new (Ctx->allocate<ConstantValue>())
+ ConstantValue(Ty, Value, PoolEntryID);
}
T getValue() const { return Value; }
+
using Constant::emit;
- virtual void emit(GlobalContext *Ctx) const {
- Ostream &Str = Ctx->getStrEmit();
- Str << getValue();
- }
+ virtual void emit(GlobalContext *Ctx) const { (void)Ctx; }
Jim Stichnoth 2014/06/27 18:30:16 Assuming this is just a stub that the target lower
wala 2014/06/27 21:09:19 Just declaring it works. There is enough variation
Jim Stichnoth 2014/06/27 23:11:05 Thanks. I think it was the original way before I
+
using Constant::dump;
virtual void dump(GlobalContext *Ctx) const {
Ostream &Str = Ctx->getStrDump();
@@ -135,17 +136,26 @@ public:
}
private:
- ConstantPrimitive(Type Ty, T Value, uint32_t PoolEntryID)
+ ConstantValue(Type Ty, T Value, uint32_t PoolEntryID)
: Constant(K, Ty, PoolEntryID), Value(Value) {}
- ConstantPrimitive(const ConstantPrimitive &) LLVM_DELETED_FUNCTION;
- ConstantPrimitive &operator=(const ConstantPrimitive &) LLVM_DELETED_FUNCTION;
- virtual ~ConstantPrimitive() {}
+ ConstantValue(const ConstantValue &) LLVM_DELETED_FUNCTION;
+ ConstantValue &operator=(const ConstantValue &) LLVM_DELETED_FUNCTION;
+ virtual ~ConstantValue() {}
const T Value;
};
-typedef ConstantPrimitive<uint64_t, Operand::kConstInteger> ConstantInteger;
-typedef ConstantPrimitive<float, Operand::kConstFloat> ConstantFloat;
-typedef ConstantPrimitive<double, Operand::kConstDouble> ConstantDouble;
+// Wrappers for primitive types
+typedef ConstantValue<uint64_t, Operand::kConstInteger> ConstantInteger;
+typedef ConstantValue<float, Operand::kConstFloat> ConstantFloat;
+typedef ConstantValue<double, Operand::kConstDouble> ConstantDouble;
+
+// ConstantVector wraps a 128 bit value.
+typedef ConstantValue<Vect128, Operand::kConstVector> ConstantVector;
+template <> void ConstantVector::dump(GlobalContext *Ctx) const;
+
+// ConstantBitVector wraps a vector of I1s.
+typedef ConstantValue<BitVect, Operand::kConstBitVector> ConstantBitVector;
+template <> void ConstantBitVector::dump(GlobalContext *Ctx) const;
// RelocatableTuple bundles the parameters that are used to
// construct an ConstantRelocatable. It is done this way so that

Powered by Google App Engine
This is Rietveld 408576698