mirror of https://github.com/xemu-project/xemu.git
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>
This commit is contained in:
parent
54fce97cfc
commit
410791228c
|
@ -28,6 +28,7 @@ TESTS+=div
|
|||
TESTS+=clst
|
||||
TESTS+=long-double
|
||||
TESTS+=cdsg
|
||||
TESTS+=chrl
|
||||
|
||||
cdsg: CFLAGS+=-pthread
|
||||
cdsg: LDFLAGS+=-pthread
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
#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;
|
||||
}
|
Loading…
Reference in New Issue