From 211d6eb27b15259d03d36375cb76cd52c12046cc Mon Sep 17 00:00:00 2001 From: Michael Buesch Date: Sun, 2 Sep 2018 20:05:49 +0200 Subject: core/memory: Fix type punning warning on older compilers Signed-off-by: Michael Buesch --- awlsim/core/memory.pxd.in | 22 ++++++++++++++++------ awlsim/core/memory.py | 34 ++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/awlsim/core/memory.pxd.in b/awlsim/core/memory.pxd.in index 0ed439bf..f634f9c4 100644 --- a/awlsim/core/memory.pxd.in +++ b/awlsim/core/memory.pxd.in @@ -210,20 +210,30 @@ cdef AwlMemoryObject_asScalar_failed(AwlMemoryObject memObj) cdef uint32_t AwlMemoryObject_asScalar(AwlMemoryObject memObj) except? 0x7FFFFFFF cdef inline uint32_t AwlMemoryObject_asScalar1(AwlMemoryObject memObj): - return (memObj.dataBytes[0]) & 1u + cdef const uint8_t *dataBytes + dataBytes = &memObj.dataBytes[0] + return (dataBytes[0]) & 1u cdef inline uint32_t AwlMemoryObject_asScalar8(AwlMemoryObject memObj): - return (memObj.dataBytes[0]) + cdef const uint8_t *dataBytes + dataBytes = &memObj.dataBytes[0] + return (dataBytes[0]) cdef inline uint32_t AwlMemoryObject_asScalar16(AwlMemoryObject memObj): - return be16toh(((&memObj.dataBytes[0]))[0]) + cdef const uint8_t *dataBytes + dataBytes = &memObj.dataBytes[0] + return be16toh((dataBytes)[0]) cdef inline uint32_t AwlMemoryObject_asScalar24(AwlMemoryObject memObj): - return ((be16toh(((&memObj.dataBytes[0]))[0]) << 8) | - memObj.dataBytes[2]) + cdef const uint8_t *dataBytes + dataBytes = &memObj.dataBytes[0] + return ((be16toh((dataBytes)[0]) << 8) | + dataBytes[2]) cdef inline uint32_t AwlMemoryObject_asScalar32(AwlMemoryObject memObj): - return be32toh(((&memObj.dataBytes[0]))[0]) + cdef const uint8_t *dataBytes + dataBytes = &memObj.dataBytes[0] + return be32toh((dataBytes)[0]) cdef bytearray AwlMemoryObject_asBytes(AwlMemoryObject memObj) diff --git a/awlsim/core/memory.py b/awlsim/core/memory.py index 7f494829..520f50f9 100644 --- a/awlsim/core/memory.py +++ b/awlsim/core/memory.py @@ -850,52 +850,58 @@ make_AwlMemoryObject_fromScalar48 = lambda v: make_AwlMemoryObject_fromScalar(v, #cdef AwlMemoryObject make_AwlMemoryObject_fromScalar1(int64_t value) except NULL: #@cy #@cy cdef AwlMemoryObject memObj -#@cy cdef uint32_t byteOffset +#@cy cdef uint8_t *dataBytes #@cy #@cy memObj = alloc_AwlMemoryObject(1) -#@cy memObj.dataBytes[0] = 1 if value else 0 +#@cy dataBytes = &memObj.dataBytes[0] +#@cy dataBytes[0] = 1 if value else 0 #@cy return memObj #cdef AwlMemoryObject make_AwlMemoryObject_fromScalar8(int64_t value) except NULL: #@cy #@cy cdef AwlMemoryObject memObj -#@cy cdef uint32_t byteOffset +#@cy cdef uint8_t *dataBytes #@cy #@cy memObj = alloc_AwlMemoryObject(8) -#@cy memObj.dataBytes[0] = value +#@cy dataBytes = &memObj.dataBytes[0] +#@cy dataBytes[0] = value #@cy return memObj #cdef AwlMemoryObject make_AwlMemoryObject_fromScalar16(int64_t value) except NULL: #@cy #@cy cdef AwlMemoryObject memObj -#@cy cdef uint32_t byteOffset +#@cy cdef uint8_t *dataBytes #@cy #@cy memObj = alloc_AwlMemoryObject(16) -#@cy ((&memObj.dataBytes[0]))[0] = htobe16(value) +#@cy dataBytes = &memObj.dataBytes[0] +#@cy (dataBytes)[0] = htobe16(value) #@cy return memObj #cdef AwlMemoryObject make_AwlMemoryObject_fromScalar24(int64_t value) except NULL: #@cy #@cy cdef AwlMemoryObject memObj -#@cy cdef uint32_t byteOffset +#@cy cdef uint8_t *dataBytes #@cy #@cy memObj = alloc_AwlMemoryObject(24) -#@cy ((&memObj.dataBytes[0]))[0] = htobe16((value >> 8)) -#@cy memObj.dataBytes[2] = value +#@cy dataBytes = &memObj.dataBytes[0] +#@cy (dataBytes)[0] = htobe16((value >> 8)) +#@cy dataBytes[2] = value #@cy return memObj #cdef AwlMemoryObject make_AwlMemoryObject_fromScalar32(int64_t value) except NULL: #@cy #@cy cdef AwlMemoryObject memObj -#@cy cdef uint32_t byteOffset +#@cy cdef uint8_t *dataBytes #@cy #@cy memObj = alloc_AwlMemoryObject(32) -#@cy ((&memObj.dataBytes[0]))[0] = htobe32(value) +#@cy dataBytes = &memObj.dataBytes[0] +#@cy (dataBytes)[0] = htobe32(value) #@cy return memObj #cdef AwlMemoryObject make_AwlMemoryObject_fromScalar48(int64_t value) except NULL: #@cy #@cy cdef AwlMemoryObject memObj -#@cy cdef uint32_t byteOffset +#@cy cdef uint8_t *dataBytes #@cy #@cy memObj = alloc_AwlMemoryObject(48) -#@cy ((&memObj.dataBytes[0]))[0] = htobe32((value >> 16)) -#@cy ((&memObj.dataBytes[4]))[0] = htobe16(value) +#@cy dataBytes = &memObj.dataBytes[0] +#@cy (dataBytes)[0] = htobe32((value >> 16)) +#@cy (dataBytes)[2] = htobe16(value) #@cy return memObj def make_AwlMemoryObject_fromGeneric(value, width): #@nocy -- cgit v1.2.3