Please refer the following commit and don't use ulong at the host side directly.
commit cd8604c12ba92cfd52f2b6564f316616cb3a9a62 Author: Yang Rong <[email protected]> Date: Mon Sep 1 13:05:05 2014 +0800 Two minor fix. 1. Some systems don't define ulong type, use unsigned long instead of.. On Wed, Sep 17, 2014 at 11:04:04PM +0800, [email protected] wrote: > From: Junyan He <[email protected]> > > Signed-off-by: Junyan He <[email protected]> > --- > backend/src/ir/printf.cpp | 25 ++++++++++++++++++++----- > backend/src/llvm/llvm_printf_parser.cpp | 22 +++++++++++++++------- > kernels/test_printf.cl | 3 +++ > 3 files changed, 38 insertions(+), 12 deletions(-) > > diff --git a/backend/src/ir/printf.cpp b/backend/src/ir/printf.cpp > index 9d60402..fc7e2fe 100644 > --- a/backend/src/ir/printf.cpp > +++ b/backend/src/ir/printf.cpp > @@ -149,20 +149,35 @@ namespace gbe > switch (slot.state->conversion_specifier) { > case PRINTF_CONVERSION_D: > case PRINTF_CONVERSION_I: > - PRINT_SOMETHING(int, d); > + if (slot.state->length_modifier == PRINTF_LM_L) > + PRINT_SOMETHING(long, d); > + else > + PRINT_SOMETHING(int, d); > break; > > case PRINTF_CONVERSION_O: > - PRINT_SOMETHING(int, o); > + if (slot.state->length_modifier == PRINTF_LM_L) > + PRINT_SOMETHING(long, o); > + else > + PRINT_SOMETHING(int, o); > break; > case PRINTF_CONVERSION_U: > - PRINT_SOMETHING(int, u); > + if (slot.state->length_modifier == PRINTF_LM_L) > + PRINT_SOMETHING(long, u); > + else > + PRINT_SOMETHING(int, u); > break; > case PRINTF_CONVERSION_X: > - PRINT_SOMETHING(int, X); > + if (slot.state->length_modifier == PRINTF_LM_L) > + PRINT_SOMETHING(long, X); > + else > + PRINT_SOMETHING(int, X); > break; > case PRINTF_CONVERSION_x: > - PRINT_SOMETHING(int, x); > + if (slot.state->length_modifier == PRINTF_LM_L) > + PRINT_SOMETHING(long, x); > + else > + PRINT_SOMETHING(int, x); > break; > > case PRINTF_CONVERSION_C: > diff --git a/backend/src/llvm/llvm_printf_parser.cpp > b/backend/src/llvm/llvm_printf_parser.cpp > index 00e1ef8..42cc878 100644 > --- a/backend/src/llvm/llvm_printf_parser.cpp > +++ b/backend/src/llvm/llvm_printf_parser.cpp > @@ -640,14 +640,22 @@ error: > case PRINTF_CONVERSION_U: > case PRINTF_CONVERSION_x: > case PRINTF_CONVERSION_X: > - /* If the bits change, we need to consider the signed. */ > - if (arg->getType() != Type::getInt32Ty(module->getContext())) { > - arg = builder->CreateIntCast(arg, > Type::getInt32Ty(module->getContext()), sign); > - } > + if (slot.state->length_modifier == PRINTF_LM_L) { /* we would > rather print long. */ > + if (arg->getType() != Type::getInt64Ty(module->getContext())) { > + arg = builder->CreateIntCast(arg, > Type::getInt64Ty(module->getContext()), sign); > + } > + dst_type = Type::getInt64PtrTy(module->getContext(), 1); > + sizeof_size = sizeof(ulong); > + } else { > + /* If the bits change, we need to consider the signed. */ > + if (arg->getType() != Type::getInt32Ty(module->getContext())) { > + arg = builder->CreateIntCast(arg, > Type::getInt32Ty(module->getContext()), sign); > + } > > - /* Int to Int, just store. */ > - dst_type = Type::getInt32PtrTy(module->getContext(), 1); > - sizeof_size = sizeof(int); > + /* Int to Int, just store. */ > + dst_type = Type::getInt32PtrTy(module->getContext(), 1); > + sizeof_size = sizeof(int); > + } > return true; > > case PRINTF_CONVERSION_C: > diff --git a/kernels/test_printf.cl b/kernels/test_printf.cl > index 84bb478..c2844f4 100644 > --- a/kernels/test_printf.cl > +++ b/kernels/test_printf.cl > @@ -7,6 +7,7 @@ test_printf(void) > uint a = 'x'; > float f = 5.0f; > int3 vec; > + ulong cc = 1004294967296; > vec.x = x; > vec.y = y; > vec.z = z; > @@ -15,6 +16,8 @@ test_printf(void) > printf("--- Welcome to the printf test of %s ---\n", "Intel Beignet"); > > printf("### output a char is %c\n", a); > + > + printf("@@@ A long value is %ld\n", cc); > } > > if (x % 15 == 0) > -- > 1.7.9.5 > > > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
