> -----Original Message-----
> From: lng-odp [mailto:lng-odp-bounces@lists.linaro.org] On Behalf Of
> EXT Nicolas Morey-Chaisemartin
> Sent: Tuesday, November 10, 2015 5:13 PM
> To: Zoltan Kiss; linaro-toolchain@lists.linaro.org
> Cc: lng-odp
> Subject: Re: [lng-odp] Runtime inlining
>
> As I said in the call last week, the problem is wider than that.
>
> ODP specifies a lot of types but not their sizes, a lot of
> enums/defines (things like ODP_PKTIO_INVALID) but not their value
> either.
> For our port a lot of those values were changed for
> performance/implementation reason. So I'm not even compatible between
> one version of our ODP port and another one.
>
> The only way I can see to solve this is for ODP to fix the size of all
> these types.
> Default/Invalid values are not that easy, as a pointer would have a
> completely different behaviour from structs/bitfields
>
> Nicolas
>
Type sizes do not need to be fixed in general, but only when an application is build for binary compatibility (the use case we are talking here). Binary compatibility and thus the fixed type sizes are defined per ISA.
We can e.g. define a configure target (for our reference implementation == linux-generic) "--binary-compatible=armv8.x" or "--binary-compatible=x86_64". When you build your application with that option, "platform dependent" types and constants would be fixed to pre-defined values specified in (new) ODP API arch files.
So instead of building against odp/platform/linux-generic/include/odp/plat/queue_types.h ...
typedef ODP_HANDLE_T(odp_queue_t);
#define ODP_QUEUE_INVALID _odp_cast_scalar(odp_queue_t, 0)
#define ODP_QUEUE_NAME_LEN 32
... you'd build against odp/arch/armv8.x/include/odp/queue_types.h ...
typedef uintptr_t odp_queue_t;
#define ODP_QUEUE_INVALID ((uintptr_t)0)
#define ODP_QUEUE_NAME_LEN 64
... or odp/arch/x86_64/include/odp/queue_types.h
typedef uint64_t odp_queue_t;
#define ODP_QUEUE_INVALID ((uint64_t)0xffffffffffffffff)
#define ODP_QUEUE_NAME_LEN 32
For highest performance on a fixed target platform, you'd still build against the platform directly
odp/platform/<soc_vendor_xyz>/include/odp/plat/queue_types.h
typedef xyz_queue_desc_t * odp_queue_t;
#define ODP_QUEUE_INVALID ((xyz_queue_desc_t *)0xdeadbeef)
#define ODP_QUEUE_NAME_LEN 20
-Petri
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp