From: Zhigang Gong Date: Fri, 24 May 2013 09:40:54 +0000 (+0800) Subject: GBE: support load/store of char/short vector. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f017fe759939edd75ba09288327b81120d6805a3;p=contrib%2Fbeignet.git GBE: support load/store of char/short vector. We just load/store those vector elements one by one. Signed-off-by: Zhigang Gong Tested-by: Lv, Meng Reviewed-by: Yang Rong --- diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp index 3fe0cbf..0037af2 100644 --- a/backend/src/llvm/llvm_gen_backend.cpp +++ b/backend/src/llvm/llvm_gen_backend.cpp @@ -2224,8 +2224,27 @@ namespace gbe ctx.STORE(type, tuple, addr, addrSpace, 4, true); } } - } else - GBE_ASSERTM(false, "loads / stores of vectors of short / chars is not supported yet"); + } else { + for (uint32_t elemID = 0; elemID < elemNum; elemID++) { + const ir::Register reg = this->getRegister(llvmValues, elemID); + ir::Register addr; + if (elemID == 0) + addr = ptr; + else { + const ir::Register offset = ctx.reg(pointerFamily); + ir::ImmediateIndex immIndex; + int elemSize = getTypeByteSize(unit, elemType); + immIndex = ctx.newImmediate(int32_t(elemID * elemSize)); + addr = ctx.reg(pointerFamily); + ctx.LOADI(ir::TYPE_S32, offset, immIndex); + ctx.ADD(ir::TYPE_S32, addr, ptr, offset); + } + if (isLoad) + ctx.LOAD(type, addr, addrSpace, dwAligned, reg); + else + ctx.STORE(type, addr, addrSpace, dwAligned, reg); + } + } } }