blob: ee5b1886f9187551cc918d54f9815ea20a02985f [file] [log] [blame]
#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;
}