1 #include <stdio.h>
2 #include "../../../none/tests/s390x/opcodes.h"
main()3 int 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