mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 01:46:17 +00:00
76 lines
1.3 KiB
C
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;
|
|
}
|