aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/JSBackend/JSBackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/JSBackend/JSBackend.cpp')
-rw-r--r--lib/Target/JSBackend/JSBackend.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/lib/Target/JSBackend/JSBackend.cpp b/lib/Target/JSBackend/JSBackend.cpp
index 82769e6370..1bee376b32 100644
--- a/lib/Target/JSBackend/JSBackend.cpp
+++ b/lib/Target/JSBackend/JSBackend.cpp
@@ -321,6 +321,7 @@ namespace {
}
std::string getPtrLoad(const Value* Ptr);
+ std::string getHeapAccess(const std::string& Name, unsigned Bytes, bool Integer=true);
std::string getPtrUse(const Value* Ptr);
std::string getConstant(const Constant*, AsmCast sign=ASM_SIGNED);
std::string getValueAsStr(const Value*, AsmCast sign=ASM_SIGNED);
@@ -747,6 +748,22 @@ std::string JSWriter::getPtrLoad(const Value* Ptr) {
return getCast(getPtrUse(Ptr), t, ASM_NONSPECIFIC);
}
+std::string JSWriter::getHeapAccess(const std::string& Name, unsigned Bytes, bool Integer) {
+ switch (Bytes) {
+ default: assert(false && "Unsupported type");
+ case 8: return "HEAPF64[" + Name + ">>3]";
+ case 4: {
+ if (Integer) {
+ return "HEAP32[" + Name + ">>2]";
+ } else {
+ return "HEAPF32[" + Name + ">>2]";
+ }
+ }
+ case 2: return "HEAP16[" + Name + ">>1]";
+ case 1: return "HEAP8[" + Name + "]";
+ }
+}
+
std::string JSWriter::getPtrUse(const Value* Ptr) {
Type *t = cast<PointerType>(Ptr->getType())->getElementType();
unsigned Bytes = t->getPrimitiveSizeInBits()/8;
@@ -767,20 +784,7 @@ std::string JSWriter::getPtrUse(const Value* Ptr) {
case 1: return "HEAP8[" + utostr(Addr) + "]";
}
} else {
- std::string Name = getOpName(Ptr);
- switch (Bytes) {
- default: assert(false && "Unsupported type");
- case 8: return "HEAPF64[" + Name + ">>3]";
- case 4: {
- if (t->isIntegerTy()) {
- return "HEAP32[" + Name + ">>2]";
- } else {
- return "HEAPF32[" + Name + ">>2]";
- }
- }
- case 2: return "HEAP16[" + Name + ">>1]";
- case 1: return "HEAP8[" + Name + "]";
- }
+ return getHeapAccess(getOpName(Ptr), Bytes, t->isIntegerTy());
}
}