qemu/tests/tcg/s390x/chrl.c
Nina Schoetterl-Glausch 410791228c tests/tcg/s390x: Add C(G)HRL test
Test COMPARE HALFWORD RELATIVE LONG instructions.
Test that the bytes following the second operand do not affect the
instruction.
Test the sign extension performed on the second operand.

Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20230310114157.3024170-3-nsg@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2023-03-13 09:23:42 +01:00

81 lines
1.5 KiB
C

#include <stdlib.h>
#include <assert.h>
#include <stdint.h>
static void test_chrl(void)
{
uint32_t program_mask, cc;
asm volatile (
".pushsection .rodata\n"
"0:\n\t"
".short 1, 0x8000\n\t"
".popsection\n\t"
"chrl %[r], 0b\n\t"
"ipm %[program_mask]\n"
: [program_mask] "=r" (program_mask)
: [r] "r" (1)
);
cc = program_mask >> 28;
assert(!cc);
asm volatile (
".pushsection .rodata\n"
"0:\n\t"
".short -1, 0x8000\n\t"
".popsection\n\t"
"chrl %[r], 0b\n\t"
"ipm %[program_mask]\n"
: [program_mask] "=r" (program_mask)
: [r] "r" (-1)
);
cc = program_mask >> 28;
assert(!cc);
}
static void test_cghrl(void)
{
uint32_t program_mask, cc;
asm volatile (
".pushsection .rodata\n"
"0:\n\t"
".short 1, 0x8000, 0, 0\n\t"
".popsection\n\t"
"cghrl %[r], 0b\n\t"
"ipm %[program_mask]\n"
: [program_mask] "=r" (program_mask)
: [r] "r" (1L)
);
cc = program_mask >> 28;
assert(!cc);
asm volatile (
".pushsection .rodata\n"
"0:\n\t"
".short -1, 0x8000, 0, 0\n\t"
".popsection\n\t"
"cghrl %[r], 0b\n\t"
"ipm %[program_mask]\n"
: [program_mask] "=r" (program_mask)
: [r] "r" (-1L)
);
cc = program_mask >> 28;
assert(!cc);
}
int main(void)
{
test_chrl();
test_cghrl();
return EXIT_SUCCESS;
}