---
 tests/cl/program/execute/realign-stack.cl | 96 +++++++++++++++++++++++++++++++
 1 file changed, 96 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..ed62ea211
--- /dev/null
+++ b/tests/cl/program/execute/realign-stack.cl
@@ -0,0 +1,96 @@
+/*!
+
+[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 uint addr = (uint)&requires_align16;
+    return (addr & 15) == 0;
+}
+
+NOINLINE
+int test_stack_object_alignment32() {
+    volatile int8 requires_align32 = 0;
+    volatile uint addr = (uint)&requires_align32;
+    return (addr & 31) == 0;
+}
+
+NOINLINE
+int test_stack_object_alignment64() {
+    volatile int16 requires_align64 = 0;
+    volatile uint addr = (uint)&requires_align64;
+    return (addr & 63) == 0;
+}
+
+NOINLINE
+int test_stack_object_alignment128() {
+    volatile long16 requires_align128 = 0;
+    volatile uint 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.14.1

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to