diff --git a/cpu_ref/linkloader/android/librsloader.cpp b/cpu_ref/linkloader/android/librsloader.cpp
index 200006f..8357470 100644
--- a/cpu_ref/linkloader/android/librsloader.cpp
+++ b/cpu_ref/linkloader/android/librsloader.cpp
@@ -91,7 +91,12 @@
           static_cast<ELFSectionBits<32>*>(object->getSectionByIndex(i));
       if (bits) {
         const unsigned char* addr = bits->getBuffer();
+#ifdef __LP64__
+        ALOGE("Code temporarily disabled for 64bit build");
+        abort();
+#else
         shtab[i].sh_addr = reinterpret_cast<llvm::ELF::Elf32_Addr>(addr);
+#endif
       }
     }
   }
diff --git a/cpu_ref/linkloader/include/impl/ELFObject.hxx b/cpu_ref/linkloader/include/impl/ELFObject.hxx
index ca47820..0a30097 100644
--- a/cpu_ref/linkloader/include/impl/ELFObject.hxx
+++ b/cpu_ref/linkloader/include/impl/ELFObject.hxx
@@ -381,7 +381,12 @@
       if (!S) {
         missingSymbols = true;
       }
+#ifdef __LP64__
+      llvm::errs() << "Code temporarily disabled for 64bit build";
+      abort();
+#else
       sym->setAddress((void *)S);
+#endif
     }
 
     switch (rel->getType()) {
@@ -435,7 +440,12 @@
       if (!S) {
         missingSymbols = true;
       }
+#ifdef __LP64__
+      llvm::errs() << "Code temporarily disabled for 64bit build";
+      abort();
+#else
       sym->setAddress((void *)S);
+#endif
     }
 
     switch (rel->getType()) {
@@ -485,7 +495,12 @@
       if (!S) {
         missingSymbols = true;
       }
+#ifdef __LP64__
+      llvm::errs() << "Code temporarily disabled for 64bit build";
+      abort();
+#else
       sym->setAddress((void *)S);
+#endif
     }
 
     switch (rel->getType()) {
@@ -523,7 +538,13 @@
           A += S;
           *inst |= ((A >> 2) & 0x3FFFFFF);
           if (((P + 4) >> 28) != (A >> 28)) { // far local call
+#ifdef __LP64__
+            llvm::errs() << "Code temporarily disabled for 64bit build";
+            abort();
+            void* stub = NULL;
+#else
             void *stub = text->getStubLayout()->allocateStub((void *)A);
+#endif
             rsl_assert(stub && "cannot allocate stub.");
             sym->setAddress(stub);
             S = (int32_t)(intptr_t)stub;
@@ -534,7 +555,13 @@
       } else { // shared-library call
         A = (A & 0x3FFFFFF) << 2;
         rsl_assert(A == 0 && "R_MIPS_26 addend is not zero.");
+#ifdef __LP64__
+        llvm::errs() << "Code temporarily disabled for 64bit build";
+        abort();
+        void* stub = NULL;
+#else
         void *stub = text->getStubLayout()->allocateStub((void *)S);
+#endif
         rsl_assert(stub && "cannot allocate stub.");
         sym->setAddress(stub);
         S = (int32_t)(intptr_t)stub;
@@ -560,7 +587,12 @@
       }
       if (strcmp (sym->getName(), "_gp_disp") == 0) {
           S = (int)(intptr_t)got_address() + GP_OFFSET - (int)P;
+#ifdef __LP64__
+          llvm::errs() << "Code temporarily disabled for 64bit build";
+          abort();
+#else
           sym->setAddress((void *)S);
+#endif
       }
       *inst |= (((S + A + (int)0x8000) >> 16) & 0xFFFF);
       break;
@@ -601,8 +633,14 @@
         } else { // R_MIPS_CALL16
           rsl_assert(A == 0 && "R_MIPS_CALL16 addend is not 0.");
         }
+#ifdef __LP64__
+        llvm::errs() << "Code temporarily disabled for 64bit build";
+        abort();
+        int got_index = 0;
+#else
         int got_index = search_got((int)rel->getSymTabIndex(), (void *)(S + A),
                                    sym->getBindingAttribute());
+#endif
         int got_offset = (got_index << 2) - GP_OFFSET;
         *inst |= (got_offset & 0xFFFF);
       }
diff --git a/rsContext.cpp b/rsContext.cpp
index 01debb2..3c017d7 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -32,6 +32,7 @@
 #include <sys/syscall.h>
 #include <string.h>
 #include <dlfcn.h>
+#include <inttypes.h>
 #include <unistd.h>
 
 #if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) && \
@@ -182,7 +183,8 @@
 
 
     if (props.mLogTimes) {
-        ALOGV("RS: Frame (%i),   Script %2.1f%% (%i),  Swap %2.1f%% (%i),  Idle %2.1f%% (%lli),  Internal %2.1f%% (%lli), Avg fps: %u",
+        ALOGV("RS: Frame (%i),   Script %2.1f%% (%i),  Swap %2.1f%% (%i),  Idle %2.1f%% (%" PRIi64 "),  "
+              "Internal %2.1f%% (%" PRIi64 "), Avg fps: %u",
              mTimeMSLastFrame,
              100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimeMSLastScript,
              100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimeMSLastSwap,
diff --git a/rsFileA3D.cpp b/rsFileA3D.cpp
index 3b963fe..a589033 100644
--- a/rsFileA3D.cpp
+++ b/rsFileA3D.cpp
@@ -26,6 +26,8 @@
     #include <androidfw/Asset.h>
 #endif
 
+#include <inttypes.h>
+
 using namespace android;
 using namespace android::renderscript;
 
@@ -192,7 +194,7 @@
         return false;
     }
 
-    ALOGV("file open size = %lli", mDataSize);
+    ALOGV("file open size = %" PRIi64, mDataSize);
 
     // We should know enough to read the file in at this point.
     mAlloc = malloc(mDataSize);
diff --git a/rsFont.cpp b/rsFont.cpp
index d302182..8feef2d 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -515,9 +515,9 @@
 
     ObjectBaseRef<Type> inputType = Type::getTypeRef(mRSC, constInput.get(), 1, 0, 0, false, false, 0);
 
-    uint32_t tmp[4];
+    uintptr_t tmp[4];
     tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
-    tmp[1] = (uint32_t)inputType.get();
+    tmp[1] = (uintptr_t)inputType.get();
     tmp[2] = RS_PROGRAM_PARAM_TEXTURE_TYPE;
     tmp[3] = RS_TEXTURE_2D;
 
diff --git a/rsProgram.cpp b/rsProgram.cpp
index 806d1de..d5cb344 100644
--- a/rsProgram.cpp
+++ b/rsProgram.cpp
@@ -17,11 +17,13 @@
 #include "rsContext.h"
 #include "rsProgram.h"
 
+#include <inttypes.h>
+
 using namespace android;
 using namespace android::renderscript;
 
 Program::Program(Context *rsc, const char * shaderText, size_t shaderLength,
-                 const uint32_t * params, size_t paramLength)
+                 const uintptr_t * params, size_t paramLength)
     : ProgramBase(rsc) {
 
     initMemberVars();
@@ -150,14 +152,14 @@
 void Program::bindAllocation(Context *rsc, Allocation *alloc, uint32_t slot) {
     if (alloc != NULL) {
         if (slot >= mHal.state.constantsCount) {
-            ALOGE("Attempt to bind alloc at slot %u, on shader id %u, but const count is %u",
-                 slot, (uint32_t)this, mHal.state.constantsCount);
+            ALOGE("Attempt to bind alloc at slot %u, on shader id %" PRIuPTR ", but const count is %u",
+                 slot, (uintptr_t)this, mHal.state.constantsCount);
             rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
             return;
         }
         if (alloc->getType() != mConstantTypes[slot].get()) {
-            ALOGE("Attempt to bind alloc at slot %u, on shader id %u, but types mismatch",
-                 slot, (uint32_t)this);
+            ALOGE("Attempt to bind alloc at slot %u, on shader id %" PRIuPTR ", but types mismatch",
+                 slot, (uintptr_t)this);
             rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
             return;
         }
diff --git a/rsProgram.h b/rsProgram.h
index be5631f..53f1207 100644
--- a/rsProgram.h
+++ b/rsProgram.h
@@ -59,7 +59,7 @@
     Hal mHal;
 
     Program(Context *, const char * shaderText, size_t shaderLength,
-            const uint32_t * params, size_t paramLength);
+            const uintptr_t * params, size_t paramLength);
     virtual ~Program();
     virtual bool freeChildren();
 
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index 877b8bd..360d3ab 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -17,13 +17,14 @@
 #include "rsContext.h"
 #include "rsProgramFragment.h"
 
+#include <inttypes.h>
+
 using namespace android;
 using namespace android::renderscript;
 
 ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText, size_t shaderLength,
                                  const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
-
-                                 const uint32_t * params, size_t paramLength)
+                                 const uintptr_t * params, size_t paramLength)
     : Program(rsc, shaderText, shaderLength, params, paramLength) {
     mConstantColor[0] = 1.f;
     mConstantColor[1] = 1.f;
@@ -67,7 +68,7 @@
 
     for (uint32_t ct=0; ct < mHal.state.texturesCount; ct++) {
         if (!mHal.state.textures[ct]) {
-            ALOGE("No texture bound for shader id %u, texture unit %u", (uint)this, ct);
+            ALOGE("No texture bound for shader id %" PRIuPTR ", texture unit %u", (uintptr_t)this, ct);
             rsc->setError(RS_ERROR_BAD_SHADER, "No texture bound");
             continue;
         }
@@ -110,9 +111,9 @@
 
     ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false, 0);
 
-    uint32_t tmp[2];
+    uintptr_t tmp[2];
     tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
-    tmp[1] = (uint32_t)inputType.get();
+    tmp[1] = (uintptr_t)inputType.get();
 
     Allocation *constAlloc = Allocation::createAllocation(rsc, inputType.get(),
                               RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
@@ -137,7 +138,7 @@
                                             const char** textureNames,
                                             size_t textureNamesCount,
                                             const size_t *textureNamesLength,
-                                            const uint32_t * params, size_t paramLength) {
+                                            const uintptr_t * params, size_t paramLength) {
     ProgramFragment *pf = new ProgramFragment(rsc, shaderText, shaderLength,
                                               textureNames, textureNamesCount, textureNamesLength,
                                               params, paramLength);
diff --git a/rsProgramFragment.h b/rsProgramFragment.h
index d580252..e7456b9 100644
--- a/rsProgramFragment.h
+++ b/rsProgramFragment.h
@@ -29,7 +29,7 @@
 public:
     ProgramFragment(Context *rsc, const char * shaderText, size_t shaderLength,
                     const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
-                     const uint32_t * params, size_t paramLength);
+                    const uintptr_t * params, size_t paramLength);
     virtual ~ProgramFragment();
 
     virtual void setup(Context *, ProgramFragmentState *);
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 549dcae..9c0f7fb 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -25,7 +25,7 @@
 ProgramVertex::ProgramVertex(Context *rsc, const char * shaderText, size_t shaderLength,
                              const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
 
-                             const uint32_t * params, size_t paramLength)
+                             const uintptr_t * params, size_t paramLength)
     : Program(rsc, shaderText, shaderLength, params, paramLength) {
     mRSC->mHal.funcs.vertex.init(mRSC, this, mUserShader, mUserShaderLen,
                                  textureNames, textureNamesCount, textureNamesLength);
@@ -196,11 +196,11 @@
             "  varTex0 = ATTRIB_texture0;\n"
             "}\n";
 
-    uint32_t tmp[4];
+    uintptr_t tmp[4];
     tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
-    tmp[1] = (uint32_t)inputType.get();
+    tmp[1] = (uintptr_t)inputType.get();
     tmp[2] = RS_PROGRAM_PARAM_INPUT;
-    tmp[3] = (uint32_t)attrElem.get();
+    tmp[3] = (uintptr_t)attrElem.get();
 
     ProgramVertex *pv = new ProgramVertex(rsc, shaderString, strlen(shaderString),
                                           NULL, 0, NULL, tmp, 4);
@@ -244,7 +244,7 @@
 RsProgramVertex rsi_ProgramVertexCreate(Context *rsc, const char * shaderText, size_t shaderLength,
                                         const char** textureNames, size_t textureNamesCount,
                                         const size_t *textureNamesLength,
-                                        const uint32_t * params, size_t paramLength) {
+                                        const uintptr_t * params, size_t paramLength) {
     ProgramVertex *pv = new ProgramVertex(rsc, shaderText, shaderLength,
                                           textureNames, textureNamesCount, textureNamesLength,
                                           params, paramLength);
diff --git a/rsProgramVertex.h b/rsProgramVertex.h
index 105d065..9070b9a 100644
--- a/rsProgramVertex.h
+++ b/rsProgramVertex.h
@@ -29,7 +29,7 @@
 public:
     ProgramVertex(Context *,const char * shaderText, size_t shaderLength,
                   const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
-                  const uint32_t * params, size_t paramLength);
+                  const uintptr_t * params, size_t paramLength);
     virtual ~ProgramVertex();
 
     virtual void setup(Context *rsc, ProgramVertexState *state);
diff --git a/rsg.spec b/rsg.spec
index 8ac73e8..a80a31c 100644
--- a/rsg.spec
+++ b/rsg.spec
@@ -42,7 +42,7 @@
     direct
     param const char * shaderText
     param const char ** textureNames
-    param const uint32_t * params
+    param const uintptr_t * params
     ret RsProgramFragment
     }
 
@@ -50,7 +50,7 @@
     direct
     param const char * shaderText
     param const char ** textureNames
-    param const uint32_t * params
+    param const uintptr_t * params
     ret RsProgramVertex
     }
 
