1
0
mirror of https://github.com/ioacademy-jikim/debugging synced 2025-06-11 01:46:17 +00:00
2015-12-13 22:34:58 +09:00

76 lines
1.3 KiB
C

#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;
}