Convert Constant->emit() definitions to allow multiple targets to define them.
Wasn't sure how to allow TargetX8632 and TargetARM32
to both define "ConstantInteger32::emit(GlobalContext *)",
and define them differently if both targets happen to be
ifdef'ed into the code. Rearranged things so that it's now
"TargetFoo::emit(ConstantInteger32 *)", so that each
TargetFoo can have a separate definition.
Some targets may allow emitting some types of constants
while other targets do not (64-bit int for x86-64?).
Also they emit constants with a different style.
E.g., the prefix for x86 is "$" while the prefix for ARM
is "#" and there isn't a prefix for mips(?).
Renamed emitWithoutDollar to emitWithoutPrefix.
Did this sort of multi-method dispatch via a visitor
pattern, which is a bit verbose though.
We may be able to remove the emitWithoutDollar/Prefix for
ConstantPrimitive by just inlining that into the few places
that need it (only needed for ConstantInteger32). This
undoes the unreachable methods added by: https://codereview.chromium.org/1017373002/diff/60001/src/IceTargetLoweringX8632.cpp
The only place extra was for emitting calls to constants.
There was already an inlined instance for OperandX8632Mem.
BUG= https://code.google.com/p/nativeclient/issues/detail?id=4076
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/1129263005
diff --git a/src/IceTargetLowering.h b/src/IceTargetLowering.h
index baa569f..5003574 100644
--- a/src/IceTargetLowering.h
+++ b/src/IceTargetLowering.h
@@ -23,6 +23,7 @@
#include "IceDefs.h"
#include "IceInst.h" // for the names of the Inst subtypes
+#include "IceOperand.h"
#include "IceTypes.h"
namespace Ice {
@@ -207,6 +208,16 @@
virtual void emitVariable(const Variable *Var) const = 0;
+ void emitWithoutPrefix(const ConstantRelocatable *CR) const;
+ void emit(const ConstantRelocatable *CR) const;
+ virtual const char *getConstantPrefix() const = 0;
+
+ virtual void emit(const ConstantUndef *C) const = 0;
+ virtual void emit(const ConstantInteger32 *C) const = 0;
+ virtual void emit(const ConstantInteger64 *C) const = 0;
+ virtual void emit(const ConstantFloat *C) const = 0;
+ virtual void emit(const ConstantDouble *C) const = 0;
+
// Performs target-specific argument lowering.
virtual void lowerArguments() = 0;