[Piglit] [PATCH] cl: Add test for call stack realignment
Matt Arsenault
arsenm2 at gmail.com
Tue Sep 11 03:36:32 UTC 2018
v2: Use uintptr_t
v3: Formatting
v4: More uintptr_t
---
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..eb1a23f20
--- /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 = (uintptr_t)&requires_align16;
+ return (addr & 15) == 0;
+}
+
+NOINLINE
+int test_stack_object_alignment32() {
+ volatile int8 requires_align32 = 0;
+ volatile uintptr_t addr = (uintptr_t)&requires_align32;
+ return (addr & 31) == 0;
+}
+
+NOINLINE
+int test_stack_object_alignment64() {
+ volatile int16 requires_align64 = 0;
+ volatile uintptr_t addr = (uintptr_t)&requires_align64;
+ return (addr & 63) == 0;
+}
+
+NOINLINE
+int test_stack_object_alignment128() {
+ volatile long16 requires_align128 = 0;
+ volatile uintptr_t addr = (uintptr_t)&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
More information about the Piglit
mailing list