xc.c revision 8f943afc22a6a683b78271836c8ddc462b4824a9
1/* tests, xc,oc and nc */
2#include <stdio.h>
3#include "test.h"
4
5void test_oc(void)
6{
7	char buf1[20] = "UUUUU*UUU****U*\0\0\0\0\n";
8	char buf2[20] = "*U\0*\0\0UU*\0U*AUAA*UU\n";
9	char zero[2] = "\0\0";
10
11	printf("\nOC:\n");
12	asm volatile ("oc %O0(1,%R0),%0\n"::"Q" (*zero),
13		      "Q"(*zero):"memory");
14	printf("CC:%d\n", get_cc());
15	dump_field(zero, 2);
16
17	asm volatile ("oc %O0(19,%R0),%1\n"::"Q" (*buf1),
18		      "Q"(*buf2):"memory");
19	printf("CC:%d\n", get_cc());
20	dump_field(buf1, 20);
21}
22
23void test_nc(void)
24{
25	char buf1[20] = "UUUUU*UUU****U*\0\0\0\0\n";
26	char buf2[20] = "*U\0*\0\0UU*\0U*AUAA*UU\n";
27	char zero[2] = "\0\0";
28
29	printf("\nNC:\n");
30	asm volatile ("nc %O0(1,%R0),%0\n"::"Q" (*zero),
31		      "Q"(*zero):"memory");
32	printf("CC:%d\n", get_cc());
33	dump_field(zero, 2);
34
35	asm volatile ("nc %O0(19,%R0),%1\n"::"Q" (*buf1),
36		      "Q"(*buf2):"memory");
37	printf("CC:%d\n", get_cc());
38	dump_field(buf1, 20);
39}
40
41
42void test_xc(void)
43{
44	char buf1[20] = "UUUUU*UUU****U*\0\0\0\0\n";
45	char buf2[20] = "*U\0*\0\0UU*\0U*AUAA*UU\n";
46	char buf3[20] = "0123456789abcdefghij";
47	char zero[300] =
48	    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
49	    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
50	    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
51	    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
52	    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
53	    "aaaaa";
54
55	printf("\nXC:\n");
56	asm volatile ("xc %O0(1,%R0),%0\n"::"Q" (*zero),
57		      "Q"(*zero):"memory");
58	printf("CC:%d\n", get_cc());
59	dump_field(zero, 4);
60
61	asm volatile ("xc %O0(10,%R0),%0\n"::"Q" (*zero),
62		      "Q"(*zero):"memory");
63	printf("CC:%d\n", get_cc());
64	dump_field(zero, 12);
65
66	asm volatile ("xc %O0(100,%R0),%0\n"::"Q" (*zero),
67		      "Q"(*zero):"memory");
68	printf("CC:%d\n", get_cc());
69	dump_field(zero, 102);
70
71	asm volatile ("xc %O0(256,%R0),%0\n"::"Q" (*zero),
72		      "Q"(*zero):"memory");
73	printf("CC:%d\n", get_cc());
74	dump_field(zero, 257);
75
76	asm volatile ("lghi 1,256 + 20\n"
77		      "larl 2,1f\n"
78		      "ex 1,0(2)\n"
79		      "j 2f\n"
80		      "1: xc 260(1,%0),260(%0)\n"
81		      "2:\n"::"a" (zero), "a"(zero):"memory", "1", "2");
82	printf("CC:%d\n", get_cc());
83	dump_field(zero + 260, 30);
84
85	asm volatile ("xc 0(19,%0),0(%1)\n"::"a" (buf1),
86		      "a"(buf2):"memory");
87	printf("CC:%d\n", get_cc());
88	dump_field(buf1, 20);
89	asm volatile ("xc 0(10,%0),0(%0)\n"::"a" (buf3):"memory");
90
91	printf("CC:%d\n", get_cc());
92	dump_field(buf3, 20);
93	return;
94}
95
96int main()
97{
98	test_oc();
99	test_nc();
100	test_xc();
101	return 0;
102}
103