| #include <stdio.h> |
| #include "../../../none/tests/s390x/opcodes.h" |
| int main() |
| { |
| int field1, field2; |
| int result; |
| |
| /* |
| * gcc does some tricks for checking the highest bit. It seems |
| * to load a full word/double word. |
| * By using mask=10 for brc (jhe) only the msb is influencing |
| * the code flow. This test was inspired by 308427 |
| */ |
| asm volatile( "oi %1,128\n\t" |
| "la 1,%1\n\t" |
| LTG(0,0,1,000,00) |
| "jhe 1f\n\t" |
| "lghi %0,0\n\t" |
| "j 2f\n\t" |
| "1:lghi %0,1\n\t" |
| "2:\n\t" |
| :"=d" (result) |
| :"Q" (field1) |
| :"0","cc"); |
| |
| if (result) |
| printf("Error\n"); |
| |
| asm volatile( "oi %1,128\n\t" |
| "la 1,%1\n\t" |
| LT(0,0,1,000,00) |
| "jhe 1f\n\t" |
| "lghi %0,0\n\t" |
| "j 2f\n\t" |
| "1:lghi %0,1\n\t" |
| "2:\n\t" |
| :"=d" (result) |
| :"Q" (field2) |
| :"0","cc"); |
| |
| if (result) |
| printf("Error\n"); |
| |
| asm volatile( "oi %1,128\n\t" |
| "la 1,%1\n\t" |
| LTG(0,0,1,000,00) |
| "jl 1f\n\t" |
| "lghi %0,1\n\t" |
| "j 2f\n\t" |
| "1:lghi %0,0\n\t" |
| "2:\n\t" |
| :"=d" (result) |
| :"Q" (field1) |
| :"0","cc"); |
| |
| if (result) |
| printf("Error\n"); |
| |
| asm volatile( "oi %1,128\n\t" |
| "la 1,%1\n\t" |
| LT(0,0,1,000,00) |
| "jl 1f\n\t" |
| "lghi %0,1\n\t" |
| "j 2f\n\t" |
| "1:lghi %0,0\n\t" |
| "2:\n\t" |
| :"=d" (result) |
| :"Q" (field2) |
| :"0","cc"); |
| |
| if (result) |
| printf("Error\n"); |
| |
| return 0; |
| } |