[Piglit] [PATCH] cl: Add test for call stack realignment

Jan Vesely jan.vesely at rutgers.edu
Wed Aug 22 05:57:21 UTC 2018


On Tue, 2018-08-21 at 21:00 +0300, Matt Arsenault wrote:
> ping

sorry. I won't have access to my machines until next week (possibly
September)

> 
> > On Aug 13, 2018, at 23:33, Matt Arsenault <arsenm2 at gmail.com> wrote:
> > 
> > v2: Use uintptr_t
> > 
> > v3: Formatting
> > ---
> > tests/cl/program/execute/realign-stack.cl | 93 +++++++++++++++++++++++
> > 1 file changed, 93 insertions(+)
> > create mode 100644 tests/cl/program/execute/realign-stack.cl
> > 
> > diff --git a/tests/cl/program/execute/realign-stack.cl b/tests/cl/program/execute/realign-stack.cl
> > new file mode 100644
> > index 000000000..ca83284fe
> > --- /dev/null
> > +++ b/tests/cl/program/execute/realign-stack.cl
> > @@ -0,0 +1,93 @@
> > +/*!
> > +
> > +[config]
> > +name: call with stack realignment
> > +
> > +[test]
> > +name: call stack realignment 16
> > +kernel_name: kernel_call_stack_realign16_func
> > +dimensions: 1
> > +global_size: 1 0 0
> > +
> > +arg_out: 0 buffer int[1] 1
> > +
> > +
> > +[test]
> > +name: call stack realignment 32
> > +kernel_name: kernel_call_stack_realign32_func
> > +dimensions: 1
> > +global_size: 1 0 0
> > +
> > +arg_out: 0 buffer int[1] 1
> > +
> > +[test]
> > +name: call stack realignment 64
> > +kernel_name: kernel_call_stack_realign64_func
> > +dimensions: 1
> > +global_size: 1 0 0
> > +
> > +arg_out: 0 buffer int[1] 1
> > +
> > +[test]
> > +name: call stack realignment 128
> > +kernel_name: kernel_call_stack_realign128_func
> > +dimensions: 1
> > +global_size: 1 0 0
> > +
> > +arg_out: 0 buffer int[1] 1
> > +
> > +
> > +!*/
> > +
> > +// Make sure the absolute private address of stack objects in callee
> > +// functions is properly aligned.
> > +
> > +#define NOINLINE __attribute__((noinline))
> > +
> > +NOINLINE
> > +int test_stack_object_alignment16() {
> > +    volatile int4 requires_align16 = 0;
> > +    volatile uintptr_t addr = (uint)&requires_align16;

The cast should probably be (uintptr_t) as well, right?

> > +    return (addr & 15) == 0;

The test would be clearer if these constants were in hex (0xf)

Jan

> > +}
> > +
> > +NOINLINE
> > +int test_stack_object_alignment32() {
> > +    volatile int8 requires_align32 = 0;
> > +    volatile uintptr_t addr = (uint)&requires_align32;
> > +    return (addr & 31) == 0;
> > +}
> > +
> > +NOINLINE
> > +int test_stack_object_alignment64() {
> > +    volatile int16 requires_align64 = 0;
> > +    volatile uintptr_t addr = (uint)&requires_align64;
> > +    return (addr & 63) == 0;
> > +}
> > +
> > +NOINLINE
> > +int test_stack_object_alignment128() {
> > +    volatile long16 requires_align128 = 0;
> > +    volatile uintptr_t addr = (uint)&requires_align128;
> > +    return (addr & 127) == 0;
> > +}
> > +
> > +kernel void kernel_call_stack_realign16_func(global int* out) {
> > +    volatile int misalign_stack = 0;
> > +    *out = test_stack_object_alignment16();
> > +}
> > +
> > +kernel void kernel_call_stack_realign32_func(global int* out) {
> > +    volatile int misalign_stack = 0;
> > +    *out = test_stack_object_alignment32();
> > +}
> > +
> > +kernel void kernel_call_stack_realign64_func(global int* out) {
> > +    volatile int misalign_stack = 0;
> > +    *out = test_stack_object_alignment64();
> > +}
> > +
> > +kernel void kernel_call_stack_realign128_func(global int* out) {
> > +    volatile int misalign_stack = 0;
> > +    *out = test_stack_object_alignment128();
> > +}
> > -- 
> > 2.17.1
> > 
> 
> 

-- 
Jan Vesely <jan.vesely at rutgers.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20180822/b1b428c2/attachment.sig>


More information about the Piglit mailing list