From c954615b573a15de95b049c5cb1d7369f9e70c7f Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Mon, 25 May 2015 19:44:23 -0400 Subject: [PATCH] Add bitfield functions wrapping actual macros Not inlining macro expansions should save some space in the program section. --- barectf/cli.py | 6 +++--- barectf/templates.py | 26 +++++++++++++++++++++++++- doc/examples/simple/Makefile | 2 +- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/barectf/cli.py b/barectf/cli.py index 3dd87fa..8aea22e 100644 --- a/barectf/cli.py +++ b/barectf/cli.py @@ -863,11 +863,11 @@ class BarectfCodeGenerator: # integer: TSDL integer def _write_field_integer(self, fname, src_name, integer, scope_prefix=None): bo = self._BO_SUFFIXES_MAP[integer.byte_order] - t = self._get_obj_param_ctype(integer) length = self._get_obj_size(integer) + signed = 'signed' if integer.signed else 'unsigned' return self._template_to_clines(barectf.templates.WRITE_INTEGER, - sz=length, bo=bo, type=t, + signed=signed, sz=length, bo=bo, src_name=src_name) # Returns the C lines for writing a TSDL enumeration field. @@ -898,7 +898,7 @@ class BarectfCodeGenerator: src_name_casted = '*(({}*) &{})'.format(t, src_name) return self._template_to_clines(barectf.templates.WRITE_INTEGER, - sz=length, bo=bo, type=t, + signed='unsigned', sz=length, bo=bo, src_name=src_name_casted) # Returns the C lines for writing either a TSDL array field or a diff --git a/barectf/templates.py b/barectf/templates.py index 4e52098..2723f91 100644 --- a/barectf/templates.py +++ b/barectf/templates.py @@ -37,7 +37,7 @@ FUNC_TRACE = """{si}int {prefix}{sid}_trace_{evname}( )""" WRITE_INTEGER = """{ucprefix}_CHK_OFFSET_V(ctx->at, ctx->packet_size, {sz}); -{prefix}_bt_bitfield_write_{bo}(ctx->buf, uint8_t, ctx->at, {sz}, {src_name}); +{prefix}_write_integer_{signed}_{bo}(ctx->buf, ctx->at, {sz}, {src_name}); ctx->at += {sz};""" HEADER = """#ifndef _{ucprefix}_H @@ -322,5 +322,29 @@ do { \\ #endif +static +void $prefix$_write_integer_signed_le(void *ptr, uint32_t at, uint32_t len, int64_t v) +{ + $prefix$_bt_bitfield_write_le(ptr, uint8_t, at, len, v); +} + +static +void $prefix$_write_integer_unsigned_le(void *ptr, uint32_t at, uint32_t len, uint64_t v) +{ + $prefix$_bt_bitfield_write_le(ptr, uint8_t, at, len, v); +} + +static +void $prefix$_write_integer_signed_be(void *ptr, uint32_t at, uint32_t len, int64_t v) +{ + $prefix$_bt_bitfield_write_be(ptr, uint8_t, at, len, v); +} + +static +void $prefix$_write_integer_unsigned_be(void *ptr, uint32_t at, uint32_t len, uint64_t v) +{ + $prefix$_bt_bitfield_write_be(ptr, uint8_t, at, len, v); +} + #endif /* _$PREFIX$_BITFIELD_H */ """ diff --git a/doc/examples/simple/Makefile b/doc/examples/simple/Makefile index 058f038..6f04559 100644 --- a/doc/examples/simple/Makefile +++ b/doc/examples/simple/Makefile @@ -1,7 +1,7 @@ BARECTF ?= barectf RM = rm -rf -CFLAGS = -O2 -Wall +CFLAGS = -O2 TARGET = simple OBJS = $(TARGET).o barectf.o -- 2.34.1