1#include <stdio.h>
2#include "../../../none/tests/s390x/opcodes.h"
3int main()
4{
5	int field1, field2;
6	int result;
7
8	/*
9         * gcc does some tricks for checking the highest bit. It seems
10         * to load a full word/double word.
11         * By using mask=10 for brc (jhe) only the msb is influencing
12         * the code flow. This test was inspired by 308427
13         */
14	asm volatile(	"oi %1,128\n\t"
15			"la 1,%1\n\t"
16			LTG(0,0,1,000,00)
17			"jhe 1f\n\t"
18			"lghi %0,0\n\t"
19			"j 2f\n\t"
20			"1:lghi %0,1\n\t"
21			"2:\n\t"
22			:"=d" (result)
23			:"Q" (field1)
24			:"0","cc");
25
26	if (result)
27		printf("Error\n");
28
29	asm volatile(	"oi %1,128\n\t"
30			"la 1,%1\n\t"
31			LT(0,0,1,000,00)
32			"jhe 1f\n\t"
33			"lghi %0,0\n\t"
34			"j 2f\n\t"
35			"1:lghi %0,1\n\t"
36			"2:\n\t"
37			:"=d" (result)
38			:"Q" (field2)
39			:"0","cc");
40
41	if (result)
42		printf("Error\n");
43
44	asm volatile(	"oi %1,128\n\t"
45			"la 1,%1\n\t"
46			LTG(0,0,1,000,00)
47			"jl 1f\n\t"
48			"lghi %0,1\n\t"
49			"j 2f\n\t"
50			"1:lghi %0,0\n\t"
51			"2:\n\t"
52			:"=d" (result)
53			:"Q" (field1)
54			:"0","cc");
55
56	if (result)
57		printf("Error\n");
58
59	asm volatile(	"oi %1,128\n\t"
60			"la 1,%1\n\t"
61			LT(0,0,1,000,00)
62			"jl 1f\n\t"
63			"lghi %0,1\n\t"
64			"j 2f\n\t"
65			"1:lghi %0,0\n\t"
66			"2:\n\t"
67			:"=d" (result)
68			:"Q" (field2)
69			:"0","cc");
70
71	if (result)
72		printf("Error\n");
73
74	return 0;
75}
76