[Beignet] [PATCH] GBE: Fix a constant bug which over-write memory.
Ruiling Song
ruiling.song at intel.com
Tue Sep 24 00:39:36 PDT 2013
Previously it will always write 8 byte no matter what size of integer.
Fix it by only copying necessary data.
Reported by Homer Hsing.
Signed-off-by: Ruiling Song <ruiling.song at intel.com>
---
backend/src/llvm/llvm_gen_backend.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index 5284ce5..224c971 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -631,8 +631,10 @@ namespace gbe
case Type::TypeID::IntegerTyID:
{
const ConstantInt *ci = dyn_cast<ConstantInt>(c);
- *(uint64_t *)((char*)mem + offset) = ci->isNegative() ? ci->getSExtValue() : ci->getZExtValue();
- offset += ci->getBitWidth() / 8;
+ uint32_t size = ci->getBitWidth() / 8;
+ uint64_t data = ci->isNegative() ? ci->getSExtValue() : ci->getZExtValue();
+ memcpy((char*)mem+offset, &data, size);
+ offset += size;
break;
}
case Type::TypeID::FloatTyID:
--
1.7.9.5
More information about the Beignet
mailing list