From 4d773ed5ed0dc7a98e06bba33476b6a2983130ed Mon Sep 17 00:00:00 2001 From: Siu Kwan Lam Date: Tue, 21 Aug 2012 18:32:44 -0500 Subject: [PATCH] Add alignment control to vector_load/store. E.g: align=1 for universal alignment. default to aligned. --- builder.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/builder.py b/builder.py index bfb2791..e1489a5 100644 --- a/builder.py +++ b/builder.py @@ -1243,23 +1243,24 @@ class CArray(CValue): def type(self): return self.base_ptr.type - def vector_load(self, count): + def vector_load(self, count, align=0): parent = self.parent builder = parent.builder values = [self[i] for i in range(count)] vecty = types.vector(self.type.pointee, count) - vec = builder.load(builder.bitcast(self.base_ptr, types.pointer(vecty))) + vec = builder.load(builder.bitcast(self.base_ptr, types.pointer(vecty)), + align=align) return CTemp(parent, vec) - def vector_store(self, vec): + def vector_store(self, vec, align=0): if vec.type.element != self.type.pointee: raise TypeError("Type mismatch; expect %s but got %s" % \ (vec.type.element, self.type.pointee)) parent = self.parent builder = parent.builder - builder.store(vec.value, builder.bitcast(self.base_ptr, - types.pointer(vec.type))) + vecptr = builder.bitcast(self.base_ptr, types.pointer(vec.type)) + builder.store(vec.value, vecptr, align=align) return self class CStruct(CValue):