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